2017-01-23 20:57:14 +01:00
|
|
|
// Copyright (c) 2014-2017 The btcsuite developers
|
Reimagine btcjson package with version 2.
This commit implements a reimagining of the way the btcjson package
functions based upon how the project has evolved and lessons learned while
using it since it was first written. It therefore contains significant
changes to the API. For now, it has been implemented in a v2 subdirectory
to prevent breaking existing callers, but the ultimate goal is to update
all callers to use the new version and then to replace the old API with
the new one.
This also removes the need for the btcws completely since those commands
have been rolled in.
The following is an overview of the changes and some reasoning behind why
they were made:
- The infrastructure has been completely changed to be reflection based instead
of requiring thousands and thousands of lines of manual, and therefore error
prone, marshal/unmarshal code
- This makes it much easier to add new commands without making marshalling
mistakes since it is simply a struct definition and a call to register that
new struct (plus a trivial New<foo>Cmd function and tests, of course)
- It also makes it much easier to gain a lot of information from simply
looking at the struct definition which was previously not possible
such as the order of the parameters, which parameters are required
versus optional, and what the default values for optional parameters
are
- Each command now has usage flags associated with them that can be
queried which are intended to allow classification of the commands such
as for chain server and wallet server and websocket-only
- The help infrastructure has been completely redone to provide automatic
generation with caller provided description map and result types. This
is in contrast to the previous method of providing the help directly
which meant it would end up in the binary of anything that imported the
package
- Many of the structs have been renamed to use the terminology from the
JSON-RPC
specification:
- RawCmd/Message is now only a single struct named Request to reflect the fact
it is a JSON-RPC request
- Error is now called RPCError to reflect the fact it is specifically an RPC
error as opposed to many of the other errors that are possible
- All RPC error codes except the standard JSON-RPC 2.0 errors have been
converted from full structs to only codes since an audit of the codebase
has shown that the messages are overridden the vast majority of the time
with specifics (as they should be) and removing them also avoids the
temptation to return non-specific, and therefore not as helpful, error
messages
- There is now an Error which provides a type assertable error with
error codes so callers can better ascertain failure reasons
programatically
- The ID is no longer a part of the command and is instead specified at the time
the command is marshalled into a JSON-RPC request. This aligns better with
the way JSON-RPC functions since it is the caller who manages the ID that is
sent with any given _request_, not the package
- All <Foo>Cmd structs now treat non-pointers as required fields and pointers as
optional fields
- All New<Foo>Cmd functions now accept the exact number of parameters, with
pointers to the appropriate type for optional parameters
- This is preferrable to the old vararg syntax since it means the code will
fail to compile if the optional arguments are changed now which helps
prevent errors creep in over time from missed modifications to optional args
- All of the connection related code has been completely eliminated since this
package is not intended to used a client, rather it is intended to provide
the infrastructure needed to marshal/unmarshal Bitcoin-specific JSON-RPC
requests and replies from static types
- The btcrpcclient package provides a robust client with connection management
and higher-level types that in turn uses the primitives provided by this
package
- Even if the caller does not wish to use btcrpcclient for some reason, they
should still be responsible for connection management since they might want
to use any number of connection features which the package would not
necessarily support
- Synced a few of the commands that have added new optional fields that
have since been added to Bitcoin Core
- Includes all of the commands and notifications that were previously in
btcws
- Now provides 100% test coverage with parallel tests
- The code is completely golint and go vet clean
This has the side effect of addressing nearly everything in, and therefore
closes #26.
Also fixes #18 and closes #19.
2014-12-31 08:05:03 +01:00
|
|
|
// Use of this source code is governed by an ISC
|
|
|
|
// license that can be found in the LICENSE file.
|
|
|
|
|
|
|
|
// NOTE: This file is intended to house the RPC commands that are supported by
|
|
|
|
// a chain server.
|
|
|
|
|
|
|
|
package btcjson
|
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/json"
|
|
|
|
"fmt"
|
|
|
|
)
|
|
|
|
|
|
|
|
// AddNodeSubCmd defines the type used in the addnode JSON-RPC command for the
|
|
|
|
// sub command field.
|
|
|
|
type AddNodeSubCmd string
|
|
|
|
|
|
|
|
const (
|
|
|
|
// ANAdd indicates the specified host should be added as a persistent
|
|
|
|
// peer.
|
|
|
|
ANAdd AddNodeSubCmd = "add"
|
|
|
|
|
|
|
|
// ANRemove indicates the specified peer should be removed.
|
|
|
|
ANRemove AddNodeSubCmd = "remove"
|
|
|
|
|
|
|
|
// ANOneTry indicates the specified host should try to connect once,
|
|
|
|
// but it should not be made persistent.
|
|
|
|
ANOneTry AddNodeSubCmd = "onetry"
|
|
|
|
)
|
|
|
|
|
|
|
|
// AddNodeCmd defines the addnode JSON-RPC command.
|
|
|
|
type AddNodeCmd struct {
|
|
|
|
Addr string
|
|
|
|
SubCmd AddNodeSubCmd `jsonrpcusage:"\"add|remove|onetry\""`
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewAddNodeCmd returns a new instance which can be used to issue an addnode
|
|
|
|
// JSON-RPC command.
|
|
|
|
func NewAddNodeCmd(addr string, subCmd AddNodeSubCmd) *AddNodeCmd {
|
|
|
|
return &AddNodeCmd{
|
|
|
|
Addr: addr,
|
|
|
|
SubCmd: subCmd,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// TransactionInput represents the inputs to a transaction. Specifically a
|
|
|
|
// transaction hash and output number pair.
|
|
|
|
type TransactionInput struct {
|
|
|
|
Txid string `json:"txid"`
|
|
|
|
Vout uint32 `json:"vout"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// CreateRawTransactionCmd defines the createrawtransaction JSON-RPC command.
|
|
|
|
type CreateRawTransactionCmd struct {
|
2015-10-23 17:47:27 +02:00
|
|
|
Inputs []TransactionInput
|
|
|
|
Amounts map[string]float64 `jsonrpcusage:"{\"address\":amount,...}"` // In BTC
|
|
|
|
LockTime *int64
|
Reimagine btcjson package with version 2.
This commit implements a reimagining of the way the btcjson package
functions based upon how the project has evolved and lessons learned while
using it since it was first written. It therefore contains significant
changes to the API. For now, it has been implemented in a v2 subdirectory
to prevent breaking existing callers, but the ultimate goal is to update
all callers to use the new version and then to replace the old API with
the new one.
This also removes the need for the btcws completely since those commands
have been rolled in.
The following is an overview of the changes and some reasoning behind why
they were made:
- The infrastructure has been completely changed to be reflection based instead
of requiring thousands and thousands of lines of manual, and therefore error
prone, marshal/unmarshal code
- This makes it much easier to add new commands without making marshalling
mistakes since it is simply a struct definition and a call to register that
new struct (plus a trivial New<foo>Cmd function and tests, of course)
- It also makes it much easier to gain a lot of information from simply
looking at the struct definition which was previously not possible
such as the order of the parameters, which parameters are required
versus optional, and what the default values for optional parameters
are
- Each command now has usage flags associated with them that can be
queried which are intended to allow classification of the commands such
as for chain server and wallet server and websocket-only
- The help infrastructure has been completely redone to provide automatic
generation with caller provided description map and result types. This
is in contrast to the previous method of providing the help directly
which meant it would end up in the binary of anything that imported the
package
- Many of the structs have been renamed to use the terminology from the
JSON-RPC
specification:
- RawCmd/Message is now only a single struct named Request to reflect the fact
it is a JSON-RPC request
- Error is now called RPCError to reflect the fact it is specifically an RPC
error as opposed to many of the other errors that are possible
- All RPC error codes except the standard JSON-RPC 2.0 errors have been
converted from full structs to only codes since an audit of the codebase
has shown that the messages are overridden the vast majority of the time
with specifics (as they should be) and removing them also avoids the
temptation to return non-specific, and therefore not as helpful, error
messages
- There is now an Error which provides a type assertable error with
error codes so callers can better ascertain failure reasons
programatically
- The ID is no longer a part of the command and is instead specified at the time
the command is marshalled into a JSON-RPC request. This aligns better with
the way JSON-RPC functions since it is the caller who manages the ID that is
sent with any given _request_, not the package
- All <Foo>Cmd structs now treat non-pointers as required fields and pointers as
optional fields
- All New<Foo>Cmd functions now accept the exact number of parameters, with
pointers to the appropriate type for optional parameters
- This is preferrable to the old vararg syntax since it means the code will
fail to compile if the optional arguments are changed now which helps
prevent errors creep in over time from missed modifications to optional args
- All of the connection related code has been completely eliminated since this
package is not intended to used a client, rather it is intended to provide
the infrastructure needed to marshal/unmarshal Bitcoin-specific JSON-RPC
requests and replies from static types
- The btcrpcclient package provides a robust client with connection management
and higher-level types that in turn uses the primitives provided by this
package
- Even if the caller does not wish to use btcrpcclient for some reason, they
should still be responsible for connection management since they might want
to use any number of connection features which the package would not
necessarily support
- Synced a few of the commands that have added new optional fields that
have since been added to Bitcoin Core
- Includes all of the commands and notifications that were previously in
btcws
- Now provides 100% test coverage with parallel tests
- The code is completely golint and go vet clean
This has the side effect of addressing nearly everything in, and therefore
closes #26.
Also fixes #18 and closes #19.
2014-12-31 08:05:03 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// NewCreateRawTransactionCmd returns a new instance which can be used to issue
|
|
|
|
// a createrawtransaction JSON-RPC command.
|
|
|
|
//
|
|
|
|
// Amounts are in BTC.
|
2015-10-23 17:47:27 +02:00
|
|
|
func NewCreateRawTransactionCmd(inputs []TransactionInput, amounts map[string]float64,
|
|
|
|
lockTime *int64) *CreateRawTransactionCmd {
|
|
|
|
|
Reimagine btcjson package with version 2.
This commit implements a reimagining of the way the btcjson package
functions based upon how the project has evolved and lessons learned while
using it since it was first written. It therefore contains significant
changes to the API. For now, it has been implemented in a v2 subdirectory
to prevent breaking existing callers, but the ultimate goal is to update
all callers to use the new version and then to replace the old API with
the new one.
This also removes the need for the btcws completely since those commands
have been rolled in.
The following is an overview of the changes and some reasoning behind why
they were made:
- The infrastructure has been completely changed to be reflection based instead
of requiring thousands and thousands of lines of manual, and therefore error
prone, marshal/unmarshal code
- This makes it much easier to add new commands without making marshalling
mistakes since it is simply a struct definition and a call to register that
new struct (plus a trivial New<foo>Cmd function and tests, of course)
- It also makes it much easier to gain a lot of information from simply
looking at the struct definition which was previously not possible
such as the order of the parameters, which parameters are required
versus optional, and what the default values for optional parameters
are
- Each command now has usage flags associated with them that can be
queried which are intended to allow classification of the commands such
as for chain server and wallet server and websocket-only
- The help infrastructure has been completely redone to provide automatic
generation with caller provided description map and result types. This
is in contrast to the previous method of providing the help directly
which meant it would end up in the binary of anything that imported the
package
- Many of the structs have been renamed to use the terminology from the
JSON-RPC
specification:
- RawCmd/Message is now only a single struct named Request to reflect the fact
it is a JSON-RPC request
- Error is now called RPCError to reflect the fact it is specifically an RPC
error as opposed to many of the other errors that are possible
- All RPC error codes except the standard JSON-RPC 2.0 errors have been
converted from full structs to only codes since an audit of the codebase
has shown that the messages are overridden the vast majority of the time
with specifics (as they should be) and removing them also avoids the
temptation to return non-specific, and therefore not as helpful, error
messages
- There is now an Error which provides a type assertable error with
error codes so callers can better ascertain failure reasons
programatically
- The ID is no longer a part of the command and is instead specified at the time
the command is marshalled into a JSON-RPC request. This aligns better with
the way JSON-RPC functions since it is the caller who manages the ID that is
sent with any given _request_, not the package
- All <Foo>Cmd structs now treat non-pointers as required fields and pointers as
optional fields
- All New<Foo>Cmd functions now accept the exact number of parameters, with
pointers to the appropriate type for optional parameters
- This is preferrable to the old vararg syntax since it means the code will
fail to compile if the optional arguments are changed now which helps
prevent errors creep in over time from missed modifications to optional args
- All of the connection related code has been completely eliminated since this
package is not intended to used a client, rather it is intended to provide
the infrastructure needed to marshal/unmarshal Bitcoin-specific JSON-RPC
requests and replies from static types
- The btcrpcclient package provides a robust client with connection management
and higher-level types that in turn uses the primitives provided by this
package
- Even if the caller does not wish to use btcrpcclient for some reason, they
should still be responsible for connection management since they might want
to use any number of connection features which the package would not
necessarily support
- Synced a few of the commands that have added new optional fields that
have since been added to Bitcoin Core
- Includes all of the commands and notifications that were previously in
btcws
- Now provides 100% test coverage with parallel tests
- The code is completely golint and go vet clean
This has the side effect of addressing nearly everything in, and therefore
closes #26.
Also fixes #18 and closes #19.
2014-12-31 08:05:03 +01:00
|
|
|
return &CreateRawTransactionCmd{
|
2015-10-23 17:47:27 +02:00
|
|
|
Inputs: inputs,
|
|
|
|
Amounts: amounts,
|
|
|
|
LockTime: lockTime,
|
Reimagine btcjson package with version 2.
This commit implements a reimagining of the way the btcjson package
functions based upon how the project has evolved and lessons learned while
using it since it was first written. It therefore contains significant
changes to the API. For now, it has been implemented in a v2 subdirectory
to prevent breaking existing callers, but the ultimate goal is to update
all callers to use the new version and then to replace the old API with
the new one.
This also removes the need for the btcws completely since those commands
have been rolled in.
The following is an overview of the changes and some reasoning behind why
they were made:
- The infrastructure has been completely changed to be reflection based instead
of requiring thousands and thousands of lines of manual, and therefore error
prone, marshal/unmarshal code
- This makes it much easier to add new commands without making marshalling
mistakes since it is simply a struct definition and a call to register that
new struct (plus a trivial New<foo>Cmd function and tests, of course)
- It also makes it much easier to gain a lot of information from simply
looking at the struct definition which was previously not possible
such as the order of the parameters, which parameters are required
versus optional, and what the default values for optional parameters
are
- Each command now has usage flags associated with them that can be
queried which are intended to allow classification of the commands such
as for chain server and wallet server and websocket-only
- The help infrastructure has been completely redone to provide automatic
generation with caller provided description map and result types. This
is in contrast to the previous method of providing the help directly
which meant it would end up in the binary of anything that imported the
package
- Many of the structs have been renamed to use the terminology from the
JSON-RPC
specification:
- RawCmd/Message is now only a single struct named Request to reflect the fact
it is a JSON-RPC request
- Error is now called RPCError to reflect the fact it is specifically an RPC
error as opposed to many of the other errors that are possible
- All RPC error codes except the standard JSON-RPC 2.0 errors have been
converted from full structs to only codes since an audit of the codebase
has shown that the messages are overridden the vast majority of the time
with specifics (as they should be) and removing them also avoids the
temptation to return non-specific, and therefore not as helpful, error
messages
- There is now an Error which provides a type assertable error with
error codes so callers can better ascertain failure reasons
programatically
- The ID is no longer a part of the command and is instead specified at the time
the command is marshalled into a JSON-RPC request. This aligns better with
the way JSON-RPC functions since it is the caller who manages the ID that is
sent with any given _request_, not the package
- All <Foo>Cmd structs now treat non-pointers as required fields and pointers as
optional fields
- All New<Foo>Cmd functions now accept the exact number of parameters, with
pointers to the appropriate type for optional parameters
- This is preferrable to the old vararg syntax since it means the code will
fail to compile if the optional arguments are changed now which helps
prevent errors creep in over time from missed modifications to optional args
- All of the connection related code has been completely eliminated since this
package is not intended to used a client, rather it is intended to provide
the infrastructure needed to marshal/unmarshal Bitcoin-specific JSON-RPC
requests and replies from static types
- The btcrpcclient package provides a robust client with connection management
and higher-level types that in turn uses the primitives provided by this
package
- Even if the caller does not wish to use btcrpcclient for some reason, they
should still be responsible for connection management since they might want
to use any number of connection features which the package would not
necessarily support
- Synced a few of the commands that have added new optional fields that
have since been added to Bitcoin Core
- Includes all of the commands and notifications that were previously in
btcws
- Now provides 100% test coverage with parallel tests
- The code is completely golint and go vet clean
This has the side effect of addressing nearly everything in, and therefore
closes #26.
Also fixes #18 and closes #19.
2014-12-31 08:05:03 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// DecodeRawTransactionCmd defines the decoderawtransaction JSON-RPC command.
|
|
|
|
type DecodeRawTransactionCmd struct {
|
|
|
|
HexTx string
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewDecodeRawTransactionCmd returns a new instance which can be used to issue
|
|
|
|
// a decoderawtransaction JSON-RPC command.
|
|
|
|
func NewDecodeRawTransactionCmd(hexTx string) *DecodeRawTransactionCmd {
|
|
|
|
return &DecodeRawTransactionCmd{
|
|
|
|
HexTx: hexTx,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// DecodeScriptCmd defines the decodescript JSON-RPC command.
|
|
|
|
type DecodeScriptCmd struct {
|
|
|
|
HexScript string
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewDecodeScriptCmd returns a new instance which can be used to issue a
|
|
|
|
// decodescript JSON-RPC command.
|
|
|
|
func NewDecodeScriptCmd(hexScript string) *DecodeScriptCmd {
|
|
|
|
return &DecodeScriptCmd{
|
|
|
|
HexScript: hexScript,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetAddedNodeInfoCmd defines the getaddednodeinfo JSON-RPC command.
|
|
|
|
type GetAddedNodeInfoCmd struct {
|
|
|
|
DNS bool
|
|
|
|
Node *string
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewGetAddedNodeInfoCmd returns a new instance which can be used to issue a
|
|
|
|
// getaddednodeinfo JSON-RPC command.
|
|
|
|
//
|
|
|
|
// The parameters which are pointers indicate they are optional. Passing nil
|
|
|
|
// for optional parameters will use the default value.
|
|
|
|
func NewGetAddedNodeInfoCmd(dns bool, node *string) *GetAddedNodeInfoCmd {
|
|
|
|
return &GetAddedNodeInfoCmd{
|
|
|
|
DNS: dns,
|
|
|
|
Node: node,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetBestBlockHashCmd defines the getbestblockhash JSON-RPC command.
|
|
|
|
type GetBestBlockHashCmd struct{}
|
|
|
|
|
|
|
|
// NewGetBestBlockHashCmd returns a new instance which can be used to issue a
|
|
|
|
// getbestblockhash JSON-RPC command.
|
|
|
|
func NewGetBestBlockHashCmd() *GetBestBlockHashCmd {
|
|
|
|
return &GetBestBlockHashCmd{}
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetBlockCmd defines the getblock JSON-RPC command.
|
|
|
|
type GetBlockCmd struct {
|
|
|
|
Hash string
|
|
|
|
Verbose *bool `jsonrpcdefault:"true"`
|
|
|
|
VerboseTx *bool `jsonrpcdefault:"false"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewGetBlockCmd returns a new instance which can be used to issue a getblock
|
|
|
|
// JSON-RPC command.
|
|
|
|
//
|
|
|
|
// The parameters which are pointers indicate they are optional. Passing nil
|
|
|
|
// for optional parameters will use the default value.
|
|
|
|
func NewGetBlockCmd(hash string, verbose, verboseTx *bool) *GetBlockCmd {
|
|
|
|
return &GetBlockCmd{
|
|
|
|
Hash: hash,
|
|
|
|
Verbose: verbose,
|
|
|
|
VerboseTx: verboseTx,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetBlockChainInfoCmd defines the getblockchaininfo JSON-RPC command.
|
|
|
|
type GetBlockChainInfoCmd struct{}
|
|
|
|
|
|
|
|
// NewGetBlockChainInfoCmd returns a new instance which can be used to issue a
|
|
|
|
// getblockchaininfo JSON-RPC command.
|
|
|
|
func NewGetBlockChainInfoCmd() *GetBlockChainInfoCmd {
|
|
|
|
return &GetBlockChainInfoCmd{}
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetBlockCountCmd defines the getblockcount JSON-RPC command.
|
|
|
|
type GetBlockCountCmd struct{}
|
|
|
|
|
|
|
|
// NewGetBlockCountCmd returns a new instance which can be used to issue a
|
|
|
|
// getblockcount JSON-RPC command.
|
|
|
|
func NewGetBlockCountCmd() *GetBlockCountCmd {
|
|
|
|
return &GetBlockCountCmd{}
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetBlockHashCmd defines the getblockhash JSON-RPC command.
|
|
|
|
type GetBlockHashCmd struct {
|
|
|
|
Index int64
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewGetBlockHashCmd returns a new instance which can be used to issue a
|
|
|
|
// getblockhash JSON-RPC command.
|
|
|
|
func NewGetBlockHashCmd(index int64) *GetBlockHashCmd {
|
|
|
|
return &GetBlockHashCmd{
|
|
|
|
Index: index,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-07-04 19:42:43 +02:00
|
|
|
// GetBlockHeaderCmd defines the getblockheader JSON-RPC command.
|
|
|
|
type GetBlockHeaderCmd struct {
|
|
|
|
Hash string
|
|
|
|
Verbose *bool `jsonrpcdefault:"true"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewGetBlockHeaderCmd returns a new instance which can be used to issue a
|
|
|
|
// getblockheader JSON-RPC command.
|
|
|
|
func NewGetBlockHeaderCmd(hash string, verbose *bool) *GetBlockHeaderCmd {
|
|
|
|
return &GetBlockHeaderCmd{
|
|
|
|
Hash: hash,
|
|
|
|
Verbose: verbose,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
Reimagine btcjson package with version 2.
This commit implements a reimagining of the way the btcjson package
functions based upon how the project has evolved and lessons learned while
using it since it was first written. It therefore contains significant
changes to the API. For now, it has been implemented in a v2 subdirectory
to prevent breaking existing callers, but the ultimate goal is to update
all callers to use the new version and then to replace the old API with
the new one.
This also removes the need for the btcws completely since those commands
have been rolled in.
The following is an overview of the changes and some reasoning behind why
they were made:
- The infrastructure has been completely changed to be reflection based instead
of requiring thousands and thousands of lines of manual, and therefore error
prone, marshal/unmarshal code
- This makes it much easier to add new commands without making marshalling
mistakes since it is simply a struct definition and a call to register that
new struct (plus a trivial New<foo>Cmd function and tests, of course)
- It also makes it much easier to gain a lot of information from simply
looking at the struct definition which was previously not possible
such as the order of the parameters, which parameters are required
versus optional, and what the default values for optional parameters
are
- Each command now has usage flags associated with them that can be
queried which are intended to allow classification of the commands such
as for chain server and wallet server and websocket-only
- The help infrastructure has been completely redone to provide automatic
generation with caller provided description map and result types. This
is in contrast to the previous method of providing the help directly
which meant it would end up in the binary of anything that imported the
package
- Many of the structs have been renamed to use the terminology from the
JSON-RPC
specification:
- RawCmd/Message is now only a single struct named Request to reflect the fact
it is a JSON-RPC request
- Error is now called RPCError to reflect the fact it is specifically an RPC
error as opposed to many of the other errors that are possible
- All RPC error codes except the standard JSON-RPC 2.0 errors have been
converted from full structs to only codes since an audit of the codebase
has shown that the messages are overridden the vast majority of the time
with specifics (as they should be) and removing them also avoids the
temptation to return non-specific, and therefore not as helpful, error
messages
- There is now an Error which provides a type assertable error with
error codes so callers can better ascertain failure reasons
programatically
- The ID is no longer a part of the command and is instead specified at the time
the command is marshalled into a JSON-RPC request. This aligns better with
the way JSON-RPC functions since it is the caller who manages the ID that is
sent with any given _request_, not the package
- All <Foo>Cmd structs now treat non-pointers as required fields and pointers as
optional fields
- All New<Foo>Cmd functions now accept the exact number of parameters, with
pointers to the appropriate type for optional parameters
- This is preferrable to the old vararg syntax since it means the code will
fail to compile if the optional arguments are changed now which helps
prevent errors creep in over time from missed modifications to optional args
- All of the connection related code has been completely eliminated since this
package is not intended to used a client, rather it is intended to provide
the infrastructure needed to marshal/unmarshal Bitcoin-specific JSON-RPC
requests and replies from static types
- The btcrpcclient package provides a robust client with connection management
and higher-level types that in turn uses the primitives provided by this
package
- Even if the caller does not wish to use btcrpcclient for some reason, they
should still be responsible for connection management since they might want
to use any number of connection features which the package would not
necessarily support
- Synced a few of the commands that have added new optional fields that
have since been added to Bitcoin Core
- Includes all of the commands and notifications that were previously in
btcws
- Now provides 100% test coverage with parallel tests
- The code is completely golint and go vet clean
This has the side effect of addressing nearly everything in, and therefore
closes #26.
Also fixes #18 and closes #19.
2014-12-31 08:05:03 +01:00
|
|
|
// 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"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// convertTemplateRequestField potentially converts the provided value as
|
|
|
|
// needed.
|
|
|
|
func convertTemplateRequestField(fieldName string, iface interface{}) (interface{}, error) {
|
|
|
|
switch val := iface.(type) {
|
|
|
|
case nil:
|
|
|
|
return nil, nil
|
|
|
|
case bool:
|
|
|
|
return val, nil
|
|
|
|
case float64:
|
|
|
|
if val == float64(int64(val)) {
|
|
|
|
return int64(val), nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
str := fmt.Sprintf("the %s field must be unspecified, a boolean, or "+
|
|
|
|
"a 64-bit integer", fieldName)
|
|
|
|
return nil, makeError(ErrInvalidType, str)
|
|
|
|
}
|
|
|
|
|
|
|
|
// UnmarshalJSON provides a custom Unmarshal method for TemplateRequest. This
|
|
|
|
// is necessary because the SigOpLimit and SizeLimit fields can only be specific
|
|
|
|
// types.
|
|
|
|
func (t *TemplateRequest) UnmarshalJSON(data []byte) error {
|
|
|
|
type templateRequest TemplateRequest
|
|
|
|
|
|
|
|
request := (*templateRequest)(t)
|
|
|
|
if err := json.Unmarshal(data, &request); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
// The SigOpLimit field can only be nil, bool, or int64.
|
|
|
|
val, err := convertTemplateRequestField("sigoplimit", request.SigOpLimit)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
request.SigOpLimit = val
|
|
|
|
|
|
|
|
// The SizeLimit field can only be nil, bool, or int64.
|
|
|
|
val, err = convertTemplateRequestField("sizelimit", request.SizeLimit)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
request.SizeLimit = val
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetBlockTemplateCmd defines the getblocktemplate JSON-RPC command.
|
|
|
|
type GetBlockTemplateCmd struct {
|
|
|
|
Request *TemplateRequest
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewGetBlockTemplateCmd returns a new instance which can be used to issue a
|
|
|
|
// getblocktemplate JSON-RPC command.
|
|
|
|
//
|
|
|
|
// The parameters which are pointers indicate they are optional. Passing nil
|
|
|
|
// for optional parameters will use the default value.
|
|
|
|
func NewGetBlockTemplateCmd(request *TemplateRequest) *GetBlockTemplateCmd {
|
|
|
|
return &GetBlockTemplateCmd{
|
|
|
|
Request: request,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetChainTipsCmd defines the getchaintips JSON-RPC command.
|
|
|
|
type GetChainTipsCmd struct{}
|
|
|
|
|
|
|
|
// NewGetChainTipsCmd returns a new instance which can be used to issue a
|
|
|
|
// getchaintips JSON-RPC command.
|
|
|
|
func NewGetChainTipsCmd() *GetChainTipsCmd {
|
|
|
|
return &GetChainTipsCmd{}
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetConnectionCountCmd defines the getconnectioncount JSON-RPC command.
|
|
|
|
type GetConnectionCountCmd struct{}
|
|
|
|
|
|
|
|
// NewGetConnectionCountCmd returns a new instance which can be used to issue a
|
|
|
|
// getconnectioncount JSON-RPC command.
|
|
|
|
func NewGetConnectionCountCmd() *GetConnectionCountCmd {
|
|
|
|
return &GetConnectionCountCmd{}
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetDifficultyCmd defines the getdifficulty JSON-RPC command.
|
|
|
|
type GetDifficultyCmd struct{}
|
|
|
|
|
|
|
|
// NewGetDifficultyCmd returns a new instance which can be used to issue a
|
|
|
|
// getdifficulty JSON-RPC command.
|
|
|
|
func NewGetDifficultyCmd() *GetDifficultyCmd {
|
|
|
|
return &GetDifficultyCmd{}
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetGenerateCmd defines the getgenerate JSON-RPC command.
|
|
|
|
type GetGenerateCmd struct{}
|
|
|
|
|
|
|
|
// NewGetGenerateCmd returns a new instance which can be used to issue a
|
|
|
|
// getgenerate JSON-RPC command.
|
|
|
|
func NewGetGenerateCmd() *GetGenerateCmd {
|
|
|
|
return &GetGenerateCmd{}
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetHashesPerSecCmd defines the gethashespersec JSON-RPC command.
|
|
|
|
type GetHashesPerSecCmd struct{}
|
|
|
|
|
|
|
|
// NewGetHashesPerSecCmd returns a new instance which can be used to issue a
|
|
|
|
// gethashespersec JSON-RPC command.
|
|
|
|
func NewGetHashesPerSecCmd() *GetHashesPerSecCmd {
|
|
|
|
return &GetHashesPerSecCmd{}
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetInfoCmd defines the getinfo JSON-RPC command.
|
|
|
|
type GetInfoCmd struct{}
|
|
|
|
|
|
|
|
// NewGetInfoCmd returns a new instance which can be used to issue a
|
|
|
|
// getinfo JSON-RPC command.
|
|
|
|
func NewGetInfoCmd() *GetInfoCmd {
|
|
|
|
return &GetInfoCmd{}
|
|
|
|
}
|
|
|
|
|
2017-01-23 20:57:14 +01:00
|
|
|
// GetMempoolEntryCmd defines the getmempoolentry JSON-RPC command.
|
|
|
|
type GetMempoolEntryCmd struct {
|
|
|
|
TxID string
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewGetMempoolEntryCmd returns a new instance which can be used to issue a
|
|
|
|
// getmempoolentry JSON-RPC command.
|
|
|
|
func NewGetMempoolEntryCmd(txHash string) *GetMempoolEntryCmd {
|
|
|
|
return &GetMempoolEntryCmd{
|
|
|
|
TxID: txHash,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
Reimagine btcjson package with version 2.
This commit implements a reimagining of the way the btcjson package
functions based upon how the project has evolved and lessons learned while
using it since it was first written. It therefore contains significant
changes to the API. For now, it has been implemented in a v2 subdirectory
to prevent breaking existing callers, but the ultimate goal is to update
all callers to use the new version and then to replace the old API with
the new one.
This also removes the need for the btcws completely since those commands
have been rolled in.
The following is an overview of the changes and some reasoning behind why
they were made:
- The infrastructure has been completely changed to be reflection based instead
of requiring thousands and thousands of lines of manual, and therefore error
prone, marshal/unmarshal code
- This makes it much easier to add new commands without making marshalling
mistakes since it is simply a struct definition and a call to register that
new struct (plus a trivial New<foo>Cmd function and tests, of course)
- It also makes it much easier to gain a lot of information from simply
looking at the struct definition which was previously not possible
such as the order of the parameters, which parameters are required
versus optional, and what the default values for optional parameters
are
- Each command now has usage flags associated with them that can be
queried which are intended to allow classification of the commands such
as for chain server and wallet server and websocket-only
- The help infrastructure has been completely redone to provide automatic
generation with caller provided description map and result types. This
is in contrast to the previous method of providing the help directly
which meant it would end up in the binary of anything that imported the
package
- Many of the structs have been renamed to use the terminology from the
JSON-RPC
specification:
- RawCmd/Message is now only a single struct named Request to reflect the fact
it is a JSON-RPC request
- Error is now called RPCError to reflect the fact it is specifically an RPC
error as opposed to many of the other errors that are possible
- All RPC error codes except the standard JSON-RPC 2.0 errors have been
converted from full structs to only codes since an audit of the codebase
has shown that the messages are overridden the vast majority of the time
with specifics (as they should be) and removing them also avoids the
temptation to return non-specific, and therefore not as helpful, error
messages
- There is now an Error which provides a type assertable error with
error codes so callers can better ascertain failure reasons
programatically
- The ID is no longer a part of the command and is instead specified at the time
the command is marshalled into a JSON-RPC request. This aligns better with
the way JSON-RPC functions since it is the caller who manages the ID that is
sent with any given _request_, not the package
- All <Foo>Cmd structs now treat non-pointers as required fields and pointers as
optional fields
- All New<Foo>Cmd functions now accept the exact number of parameters, with
pointers to the appropriate type for optional parameters
- This is preferrable to the old vararg syntax since it means the code will
fail to compile if the optional arguments are changed now which helps
prevent errors creep in over time from missed modifications to optional args
- All of the connection related code has been completely eliminated since this
package is not intended to used a client, rather it is intended to provide
the infrastructure needed to marshal/unmarshal Bitcoin-specific JSON-RPC
requests and replies from static types
- The btcrpcclient package provides a robust client with connection management
and higher-level types that in turn uses the primitives provided by this
package
- Even if the caller does not wish to use btcrpcclient for some reason, they
should still be responsible for connection management since they might want
to use any number of connection features which the package would not
necessarily support
- Synced a few of the commands that have added new optional fields that
have since been added to Bitcoin Core
- Includes all of the commands and notifications that were previously in
btcws
- Now provides 100% test coverage with parallel tests
- The code is completely golint and go vet clean
This has the side effect of addressing nearly everything in, and therefore
closes #26.
Also fixes #18 and closes #19.
2014-12-31 08:05:03 +01:00
|
|
|
// GetMempoolInfoCmd defines the getmempoolinfo JSON-RPC command.
|
|
|
|
type GetMempoolInfoCmd struct{}
|
|
|
|
|
|
|
|
// NewGetMempoolInfoCmd returns a new instance which can be used to issue a
|
|
|
|
// getmempool JSON-RPC command.
|
|
|
|
func NewGetMempoolInfoCmd() *GetMempoolInfoCmd {
|
|
|
|
return &GetMempoolInfoCmd{}
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetMiningInfoCmd defines the getmininginfo JSON-RPC command.
|
|
|
|
type GetMiningInfoCmd struct{}
|
|
|
|
|
|
|
|
// NewGetMiningInfoCmd returns a new instance which can be used to issue a
|
|
|
|
// getmininginfo JSON-RPC command.
|
|
|
|
func NewGetMiningInfoCmd() *GetMiningInfoCmd {
|
|
|
|
return &GetMiningInfoCmd{}
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetNetworkInfoCmd defines the getnetworkinfo JSON-RPC command.
|
|
|
|
type GetNetworkInfoCmd struct{}
|
|
|
|
|
|
|
|
// NewGetNetworkInfoCmd returns a new instance which can be used to issue a
|
|
|
|
// getnetworkinfo JSON-RPC command.
|
|
|
|
func NewGetNetworkInfoCmd() *GetNetworkInfoCmd {
|
|
|
|
return &GetNetworkInfoCmd{}
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetNetTotalsCmd defines the getnettotals JSON-RPC command.
|
|
|
|
type GetNetTotalsCmd struct{}
|
|
|
|
|
|
|
|
// NewGetNetTotalsCmd returns a new instance which can be used to issue a
|
|
|
|
// getnettotals JSON-RPC command.
|
|
|
|
func NewGetNetTotalsCmd() *GetNetTotalsCmd {
|
|
|
|
return &GetNetTotalsCmd{}
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetNetworkHashPSCmd defines the getnetworkhashps JSON-RPC command.
|
|
|
|
type GetNetworkHashPSCmd struct {
|
|
|
|
Blocks *int `jsonrpcdefault:"120"`
|
|
|
|
Height *int `jsonrpcdefault:"-1"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewGetNetworkHashPSCmd returns a new instance which can be used to issue a
|
|
|
|
// getnetworkhashps JSON-RPC command.
|
|
|
|
//
|
|
|
|
// The parameters which are pointers indicate they are optional. Passing nil
|
|
|
|
// for optional parameters will use the default value.
|
|
|
|
func NewGetNetworkHashPSCmd(numBlocks, height *int) *GetNetworkHashPSCmd {
|
|
|
|
return &GetNetworkHashPSCmd{
|
|
|
|
Blocks: numBlocks,
|
|
|
|
Height: height,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetPeerInfoCmd defines the getpeerinfo JSON-RPC command.
|
|
|
|
type GetPeerInfoCmd struct{}
|
|
|
|
|
|
|
|
// NewGetPeerInfoCmd returns a new instance which can be used to issue a getpeer
|
|
|
|
// JSON-RPC command.
|
|
|
|
func NewGetPeerInfoCmd() *GetPeerInfoCmd {
|
|
|
|
return &GetPeerInfoCmd{}
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetRawMempoolCmd defines the getmempool JSON-RPC command.
|
|
|
|
type GetRawMempoolCmd struct {
|
|
|
|
Verbose *bool `jsonrpcdefault:"false"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewGetRawMempoolCmd returns a new instance which can be used to issue a
|
|
|
|
// getrawmempool JSON-RPC command.
|
|
|
|
//
|
|
|
|
// The parameters which are pointers indicate they are optional. Passing nil
|
|
|
|
// for optional parameters will use the default value.
|
|
|
|
func NewGetRawMempoolCmd(verbose *bool) *GetRawMempoolCmd {
|
|
|
|
return &GetRawMempoolCmd{
|
|
|
|
Verbose: verbose,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetRawTransactionCmd defines the getrawtransaction JSON-RPC command.
|
|
|
|
//
|
|
|
|
// NOTE: This field is an int versus a bool to remain compatible with Bitcoin
|
|
|
|
// Core even though it really should be a bool.
|
|
|
|
type GetRawTransactionCmd struct {
|
|
|
|
Txid string
|
|
|
|
Verbose *int `jsonrpcdefault:"0"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewGetRawTransactionCmd returns a new instance which can be used to issue a
|
|
|
|
// getrawtransaction JSON-RPC command.
|
|
|
|
//
|
|
|
|
// The parameters which are pointers indicate they are optional. Passing nil
|
|
|
|
// for optional parameters will use the default value.
|
|
|
|
func NewGetRawTransactionCmd(txHash string, verbose *int) *GetRawTransactionCmd {
|
|
|
|
return &GetRawTransactionCmd{
|
|
|
|
Txid: txHash,
|
|
|
|
Verbose: verbose,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetTxOutCmd defines the gettxout JSON-RPC command.
|
|
|
|
type GetTxOutCmd struct {
|
|
|
|
Txid string
|
2015-02-21 05:34:57 +01:00
|
|
|
Vout uint32
|
Reimagine btcjson package with version 2.
This commit implements a reimagining of the way the btcjson package
functions based upon how the project has evolved and lessons learned while
using it since it was first written. It therefore contains significant
changes to the API. For now, it has been implemented in a v2 subdirectory
to prevent breaking existing callers, but the ultimate goal is to update
all callers to use the new version and then to replace the old API with
the new one.
This also removes the need for the btcws completely since those commands
have been rolled in.
The following is an overview of the changes and some reasoning behind why
they were made:
- The infrastructure has been completely changed to be reflection based instead
of requiring thousands and thousands of lines of manual, and therefore error
prone, marshal/unmarshal code
- This makes it much easier to add new commands without making marshalling
mistakes since it is simply a struct definition and a call to register that
new struct (plus a trivial New<foo>Cmd function and tests, of course)
- It also makes it much easier to gain a lot of information from simply
looking at the struct definition which was previously not possible
such as the order of the parameters, which parameters are required
versus optional, and what the default values for optional parameters
are
- Each command now has usage flags associated with them that can be
queried which are intended to allow classification of the commands such
as for chain server and wallet server and websocket-only
- The help infrastructure has been completely redone to provide automatic
generation with caller provided description map and result types. This
is in contrast to the previous method of providing the help directly
which meant it would end up in the binary of anything that imported the
package
- Many of the structs have been renamed to use the terminology from the
JSON-RPC
specification:
- RawCmd/Message is now only a single struct named Request to reflect the fact
it is a JSON-RPC request
- Error is now called RPCError to reflect the fact it is specifically an RPC
error as opposed to many of the other errors that are possible
- All RPC error codes except the standard JSON-RPC 2.0 errors have been
converted from full structs to only codes since an audit of the codebase
has shown that the messages are overridden the vast majority of the time
with specifics (as they should be) and removing them also avoids the
temptation to return non-specific, and therefore not as helpful, error
messages
- There is now an Error which provides a type assertable error with
error codes so callers can better ascertain failure reasons
programatically
- The ID is no longer a part of the command and is instead specified at the time
the command is marshalled into a JSON-RPC request. This aligns better with
the way JSON-RPC functions since it is the caller who manages the ID that is
sent with any given _request_, not the package
- All <Foo>Cmd structs now treat non-pointers as required fields and pointers as
optional fields
- All New<Foo>Cmd functions now accept the exact number of parameters, with
pointers to the appropriate type for optional parameters
- This is preferrable to the old vararg syntax since it means the code will
fail to compile if the optional arguments are changed now which helps
prevent errors creep in over time from missed modifications to optional args
- All of the connection related code has been completely eliminated since this
package is not intended to used a client, rather it is intended to provide
the infrastructure needed to marshal/unmarshal Bitcoin-specific JSON-RPC
requests and replies from static types
- The btcrpcclient package provides a robust client with connection management
and higher-level types that in turn uses the primitives provided by this
package
- Even if the caller does not wish to use btcrpcclient for some reason, they
should still be responsible for connection management since they might want
to use any number of connection features which the package would not
necessarily support
- Synced a few of the commands that have added new optional fields that
have since been added to Bitcoin Core
- Includes all of the commands and notifications that were previously in
btcws
- Now provides 100% test coverage with parallel tests
- The code is completely golint and go vet clean
This has the side effect of addressing nearly everything in, and therefore
closes #26.
Also fixes #18 and closes #19.
2014-12-31 08:05:03 +01:00
|
|
|
IncludeMempool *bool `jsonrpcdefault:"true"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewGetTxOutCmd returns a new instance which can be used to issue a gettxout
|
|
|
|
// JSON-RPC command.
|
|
|
|
//
|
|
|
|
// The parameters which are pointers indicate they are optional. Passing nil
|
|
|
|
// for optional parameters will use the default value.
|
2015-02-21 05:34:57 +01:00
|
|
|
func NewGetTxOutCmd(txHash string, vout uint32, includeMempool *bool) *GetTxOutCmd {
|
Reimagine btcjson package with version 2.
This commit implements a reimagining of the way the btcjson package
functions based upon how the project has evolved and lessons learned while
using it since it was first written. It therefore contains significant
changes to the API. For now, it has been implemented in a v2 subdirectory
to prevent breaking existing callers, but the ultimate goal is to update
all callers to use the new version and then to replace the old API with
the new one.
This also removes the need for the btcws completely since those commands
have been rolled in.
The following is an overview of the changes and some reasoning behind why
they were made:
- The infrastructure has been completely changed to be reflection based instead
of requiring thousands and thousands of lines of manual, and therefore error
prone, marshal/unmarshal code
- This makes it much easier to add new commands without making marshalling
mistakes since it is simply a struct definition and a call to register that
new struct (plus a trivial New<foo>Cmd function and tests, of course)
- It also makes it much easier to gain a lot of information from simply
looking at the struct definition which was previously not possible
such as the order of the parameters, which parameters are required
versus optional, and what the default values for optional parameters
are
- Each command now has usage flags associated with them that can be
queried which are intended to allow classification of the commands such
as for chain server and wallet server and websocket-only
- The help infrastructure has been completely redone to provide automatic
generation with caller provided description map and result types. This
is in contrast to the previous method of providing the help directly
which meant it would end up in the binary of anything that imported the
package
- Many of the structs have been renamed to use the terminology from the
JSON-RPC
specification:
- RawCmd/Message is now only a single struct named Request to reflect the fact
it is a JSON-RPC request
- Error is now called RPCError to reflect the fact it is specifically an RPC
error as opposed to many of the other errors that are possible
- All RPC error codes except the standard JSON-RPC 2.0 errors have been
converted from full structs to only codes since an audit of the codebase
has shown that the messages are overridden the vast majority of the time
with specifics (as they should be) and removing them also avoids the
temptation to return non-specific, and therefore not as helpful, error
messages
- There is now an Error which provides a type assertable error with
error codes so callers can better ascertain failure reasons
programatically
- The ID is no longer a part of the command and is instead specified at the time
the command is marshalled into a JSON-RPC request. This aligns better with
the way JSON-RPC functions since it is the caller who manages the ID that is
sent with any given _request_, not the package
- All <Foo>Cmd structs now treat non-pointers as required fields and pointers as
optional fields
- All New<Foo>Cmd functions now accept the exact number of parameters, with
pointers to the appropriate type for optional parameters
- This is preferrable to the old vararg syntax since it means the code will
fail to compile if the optional arguments are changed now which helps
prevent errors creep in over time from missed modifications to optional args
- All of the connection related code has been completely eliminated since this
package is not intended to used a client, rather it is intended to provide
the infrastructure needed to marshal/unmarshal Bitcoin-specific JSON-RPC
requests and replies from static types
- The btcrpcclient package provides a robust client with connection management
and higher-level types that in turn uses the primitives provided by this
package
- Even if the caller does not wish to use btcrpcclient for some reason, they
should still be responsible for connection management since they might want
to use any number of connection features which the package would not
necessarily support
- Synced a few of the commands that have added new optional fields that
have since been added to Bitcoin Core
- Includes all of the commands and notifications that were previously in
btcws
- Now provides 100% test coverage with parallel tests
- The code is completely golint and go vet clean
This has the side effect of addressing nearly everything in, and therefore
closes #26.
Also fixes #18 and closes #19.
2014-12-31 08:05:03 +01:00
|
|
|
return &GetTxOutCmd{
|
|
|
|
Txid: txHash,
|
|
|
|
Vout: vout,
|
|
|
|
IncludeMempool: includeMempool,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-05-07 17:58:12 +02:00
|
|
|
// GetTxOutProofCmd defines the gettxoutproof JSON-RPC command.
|
|
|
|
type GetTxOutProofCmd struct {
|
|
|
|
TxIDs []string
|
|
|
|
BlockHash *string
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewGetTxOutProofCmd returns a new instance which can be used to issue a
|
|
|
|
// gettxoutproof JSON-RPC command.
|
|
|
|
//
|
|
|
|
// The parameters which are pointers indicate they are optional. Passing nil
|
|
|
|
// for optional parameters will use the default value.
|
|
|
|
func NewGetTxOutProofCmd(txIDs []string, blockHash *string) *GetTxOutProofCmd {
|
|
|
|
return &GetTxOutProofCmd{
|
|
|
|
TxIDs: txIDs,
|
|
|
|
BlockHash: blockHash,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
Reimagine btcjson package with version 2.
This commit implements a reimagining of the way the btcjson package
functions based upon how the project has evolved and lessons learned while
using it since it was first written. It therefore contains significant
changes to the API. For now, it has been implemented in a v2 subdirectory
to prevent breaking existing callers, but the ultimate goal is to update
all callers to use the new version and then to replace the old API with
the new one.
This also removes the need for the btcws completely since those commands
have been rolled in.
The following is an overview of the changes and some reasoning behind why
they were made:
- The infrastructure has been completely changed to be reflection based instead
of requiring thousands and thousands of lines of manual, and therefore error
prone, marshal/unmarshal code
- This makes it much easier to add new commands without making marshalling
mistakes since it is simply a struct definition and a call to register that
new struct (plus a trivial New<foo>Cmd function and tests, of course)
- It also makes it much easier to gain a lot of information from simply
looking at the struct definition which was previously not possible
such as the order of the parameters, which parameters are required
versus optional, and what the default values for optional parameters
are
- Each command now has usage flags associated with them that can be
queried which are intended to allow classification of the commands such
as for chain server and wallet server and websocket-only
- The help infrastructure has been completely redone to provide automatic
generation with caller provided description map and result types. This
is in contrast to the previous method of providing the help directly
which meant it would end up in the binary of anything that imported the
package
- Many of the structs have been renamed to use the terminology from the
JSON-RPC
specification:
- RawCmd/Message is now only a single struct named Request to reflect the fact
it is a JSON-RPC request
- Error is now called RPCError to reflect the fact it is specifically an RPC
error as opposed to many of the other errors that are possible
- All RPC error codes except the standard JSON-RPC 2.0 errors have been
converted from full structs to only codes since an audit of the codebase
has shown that the messages are overridden the vast majority of the time
with specifics (as they should be) and removing them also avoids the
temptation to return non-specific, and therefore not as helpful, error
messages
- There is now an Error which provides a type assertable error with
error codes so callers can better ascertain failure reasons
programatically
- The ID is no longer a part of the command and is instead specified at the time
the command is marshalled into a JSON-RPC request. This aligns better with
the way JSON-RPC functions since it is the caller who manages the ID that is
sent with any given _request_, not the package
- All <Foo>Cmd structs now treat non-pointers as required fields and pointers as
optional fields
- All New<Foo>Cmd functions now accept the exact number of parameters, with
pointers to the appropriate type for optional parameters
- This is preferrable to the old vararg syntax since it means the code will
fail to compile if the optional arguments are changed now which helps
prevent errors creep in over time from missed modifications to optional args
- All of the connection related code has been completely eliminated since this
package is not intended to used a client, rather it is intended to provide
the infrastructure needed to marshal/unmarshal Bitcoin-specific JSON-RPC
requests and replies from static types
- The btcrpcclient package provides a robust client with connection management
and higher-level types that in turn uses the primitives provided by this
package
- Even if the caller does not wish to use btcrpcclient for some reason, they
should still be responsible for connection management since they might want
to use any number of connection features which the package would not
necessarily support
- Synced a few of the commands that have added new optional fields that
have since been added to Bitcoin Core
- Includes all of the commands and notifications that were previously in
btcws
- Now provides 100% test coverage with parallel tests
- The code is completely golint and go vet clean
This has the side effect of addressing nearly everything in, and therefore
closes #26.
Also fixes #18 and closes #19.
2014-12-31 08:05:03 +01:00
|
|
|
// GetTxOutSetInfoCmd defines the gettxoutsetinfo JSON-RPC command.
|
|
|
|
type GetTxOutSetInfoCmd struct{}
|
|
|
|
|
|
|
|
// NewGetTxOutSetInfoCmd returns a new instance which can be used to issue a
|
|
|
|
// gettxoutsetinfo JSON-RPC command.
|
|
|
|
func NewGetTxOutSetInfoCmd() *GetTxOutSetInfoCmd {
|
|
|
|
return &GetTxOutSetInfoCmd{}
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetWorkCmd defines the getwork JSON-RPC command.
|
|
|
|
type GetWorkCmd struct {
|
|
|
|
Data *string
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewGetWorkCmd returns a new instance which can be used to issue a getwork
|
|
|
|
// JSON-RPC command.
|
|
|
|
//
|
|
|
|
// The parameters which are pointers indicate they are optional. Passing nil
|
|
|
|
// for optional parameters will use the default value.
|
|
|
|
func NewGetWorkCmd(data *string) *GetWorkCmd {
|
|
|
|
return &GetWorkCmd{
|
|
|
|
Data: data,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// HelpCmd defines the help JSON-RPC command.
|
|
|
|
type HelpCmd struct {
|
|
|
|
Command *string
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewHelpCmd returns a new instance which can be used to issue a help JSON-RPC
|
|
|
|
// command.
|
|
|
|
//
|
|
|
|
// The parameters which are pointers indicate they are optional. Passing nil
|
|
|
|
// for optional parameters will use the default value.
|
|
|
|
func NewHelpCmd(command *string) *HelpCmd {
|
|
|
|
return &HelpCmd{
|
|
|
|
Command: command,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// InvalidateBlockCmd defines the invalidateblock JSON-RPC command.
|
|
|
|
type InvalidateBlockCmd struct {
|
|
|
|
BlockHash string
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewInvalidateBlockCmd returns a new instance which can be used to issue a
|
|
|
|
// invalidateblock JSON-RPC command.
|
|
|
|
func NewInvalidateBlockCmd(blockHash string) *InvalidateBlockCmd {
|
|
|
|
return &InvalidateBlockCmd{
|
|
|
|
BlockHash: blockHash,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// PingCmd defines the ping JSON-RPC command.
|
|
|
|
type PingCmd struct{}
|
|
|
|
|
|
|
|
// NewPingCmd returns a new instance which can be used to issue a ping JSON-RPC
|
|
|
|
// command.
|
|
|
|
func NewPingCmd() *PingCmd {
|
|
|
|
return &PingCmd{}
|
|
|
|
}
|
|
|
|
|
2016-10-19 20:02:52 +02:00
|
|
|
// PreciousBlockCmd defines the preciousblock JSON-RPC command.
|
|
|
|
type PreciousBlockCmd struct {
|
|
|
|
BlockHash string
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewPreciousBlockCmd returns a new instance which can be used to issue a
|
|
|
|
// preciousblock JSON-RPC command.
|
|
|
|
func NewPreciousBlockCmd(blockHash string) *PreciousBlockCmd {
|
|
|
|
return &PreciousBlockCmd{
|
|
|
|
BlockHash: blockHash,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
Reimagine btcjson package with version 2.
This commit implements a reimagining of the way the btcjson package
functions based upon how the project has evolved and lessons learned while
using it since it was first written. It therefore contains significant
changes to the API. For now, it has been implemented in a v2 subdirectory
to prevent breaking existing callers, but the ultimate goal is to update
all callers to use the new version and then to replace the old API with
the new one.
This also removes the need for the btcws completely since those commands
have been rolled in.
The following is an overview of the changes and some reasoning behind why
they were made:
- The infrastructure has been completely changed to be reflection based instead
of requiring thousands and thousands of lines of manual, and therefore error
prone, marshal/unmarshal code
- This makes it much easier to add new commands without making marshalling
mistakes since it is simply a struct definition and a call to register that
new struct (plus a trivial New<foo>Cmd function and tests, of course)
- It also makes it much easier to gain a lot of information from simply
looking at the struct definition which was previously not possible
such as the order of the parameters, which parameters are required
versus optional, and what the default values for optional parameters
are
- Each command now has usage flags associated with them that can be
queried which are intended to allow classification of the commands such
as for chain server and wallet server and websocket-only
- The help infrastructure has been completely redone to provide automatic
generation with caller provided description map and result types. This
is in contrast to the previous method of providing the help directly
which meant it would end up in the binary of anything that imported the
package
- Many of the structs have been renamed to use the terminology from the
JSON-RPC
specification:
- RawCmd/Message is now only a single struct named Request to reflect the fact
it is a JSON-RPC request
- Error is now called RPCError to reflect the fact it is specifically an RPC
error as opposed to many of the other errors that are possible
- All RPC error codes except the standard JSON-RPC 2.0 errors have been
converted from full structs to only codes since an audit of the codebase
has shown that the messages are overridden the vast majority of the time
with specifics (as they should be) and removing them also avoids the
temptation to return non-specific, and therefore not as helpful, error
messages
- There is now an Error which provides a type assertable error with
error codes so callers can better ascertain failure reasons
programatically
- The ID is no longer a part of the command and is instead specified at the time
the command is marshalled into a JSON-RPC request. This aligns better with
the way JSON-RPC functions since it is the caller who manages the ID that is
sent with any given _request_, not the package
- All <Foo>Cmd structs now treat non-pointers as required fields and pointers as
optional fields
- All New<Foo>Cmd functions now accept the exact number of parameters, with
pointers to the appropriate type for optional parameters
- This is preferrable to the old vararg syntax since it means the code will
fail to compile if the optional arguments are changed now which helps
prevent errors creep in over time from missed modifications to optional args
- All of the connection related code has been completely eliminated since this
package is not intended to used a client, rather it is intended to provide
the infrastructure needed to marshal/unmarshal Bitcoin-specific JSON-RPC
requests and replies from static types
- The btcrpcclient package provides a robust client with connection management
and higher-level types that in turn uses the primitives provided by this
package
- Even if the caller does not wish to use btcrpcclient for some reason, they
should still be responsible for connection management since they might want
to use any number of connection features which the package would not
necessarily support
- Synced a few of the commands that have added new optional fields that
have since been added to Bitcoin Core
- Includes all of the commands and notifications that were previously in
btcws
- Now provides 100% test coverage with parallel tests
- The code is completely golint and go vet clean
This has the side effect of addressing nearly everything in, and therefore
closes #26.
Also fixes #18 and closes #19.
2014-12-31 08:05:03 +01:00
|
|
|
// ReconsiderBlockCmd defines the reconsiderblock JSON-RPC command.
|
|
|
|
type ReconsiderBlockCmd struct {
|
|
|
|
BlockHash string
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewReconsiderBlockCmd returns a new instance which can be used to issue a
|
|
|
|
// reconsiderblock JSON-RPC command.
|
|
|
|
func NewReconsiderBlockCmd(blockHash string) *ReconsiderBlockCmd {
|
|
|
|
return &ReconsiderBlockCmd{
|
|
|
|
BlockHash: blockHash,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// SearchRawTransactionsCmd defines the searchrawtransactions JSON-RPC command.
|
|
|
|
type SearchRawTransactionsCmd struct {
|
2015-11-16 00:30:13 +01:00
|
|
|
Address string
|
|
|
|
Verbose *int `jsonrpcdefault:"1"`
|
|
|
|
Skip *int `jsonrpcdefault:"0"`
|
|
|
|
Count *int `jsonrpcdefault:"100"`
|
|
|
|
VinExtra *int `jsonrpcdefault:"0"`
|
|
|
|
Reverse *bool `jsonrpcdefault:"false"`
|
|
|
|
FilterAddrs *[]string
|
Reimagine btcjson package with version 2.
This commit implements a reimagining of the way the btcjson package
functions based upon how the project has evolved and lessons learned while
using it since it was first written. It therefore contains significant
changes to the API. For now, it has been implemented in a v2 subdirectory
to prevent breaking existing callers, but the ultimate goal is to update
all callers to use the new version and then to replace the old API with
the new one.
This also removes the need for the btcws completely since those commands
have been rolled in.
The following is an overview of the changes and some reasoning behind why
they were made:
- The infrastructure has been completely changed to be reflection based instead
of requiring thousands and thousands of lines of manual, and therefore error
prone, marshal/unmarshal code
- This makes it much easier to add new commands without making marshalling
mistakes since it is simply a struct definition and a call to register that
new struct (plus a trivial New<foo>Cmd function and tests, of course)
- It also makes it much easier to gain a lot of information from simply
looking at the struct definition which was previously not possible
such as the order of the parameters, which parameters are required
versus optional, and what the default values for optional parameters
are
- Each command now has usage flags associated with them that can be
queried which are intended to allow classification of the commands such
as for chain server and wallet server and websocket-only
- The help infrastructure has been completely redone to provide automatic
generation with caller provided description map and result types. This
is in contrast to the previous method of providing the help directly
which meant it would end up in the binary of anything that imported the
package
- Many of the structs have been renamed to use the terminology from the
JSON-RPC
specification:
- RawCmd/Message is now only a single struct named Request to reflect the fact
it is a JSON-RPC request
- Error is now called RPCError to reflect the fact it is specifically an RPC
error as opposed to many of the other errors that are possible
- All RPC error codes except the standard JSON-RPC 2.0 errors have been
converted from full structs to only codes since an audit of the codebase
has shown that the messages are overridden the vast majority of the time
with specifics (as they should be) and removing them also avoids the
temptation to return non-specific, and therefore not as helpful, error
messages
- There is now an Error which provides a type assertable error with
error codes so callers can better ascertain failure reasons
programatically
- The ID is no longer a part of the command and is instead specified at the time
the command is marshalled into a JSON-RPC request. This aligns better with
the way JSON-RPC functions since it is the caller who manages the ID that is
sent with any given _request_, not the package
- All <Foo>Cmd structs now treat non-pointers as required fields and pointers as
optional fields
- All New<Foo>Cmd functions now accept the exact number of parameters, with
pointers to the appropriate type for optional parameters
- This is preferrable to the old vararg syntax since it means the code will
fail to compile if the optional arguments are changed now which helps
prevent errors creep in over time from missed modifications to optional args
- All of the connection related code has been completely eliminated since this
package is not intended to used a client, rather it is intended to provide
the infrastructure needed to marshal/unmarshal Bitcoin-specific JSON-RPC
requests and replies from static types
- The btcrpcclient package provides a robust client with connection management
and higher-level types that in turn uses the primitives provided by this
package
- Even if the caller does not wish to use btcrpcclient for some reason, they
should still be responsible for connection management since they might want
to use any number of connection features which the package would not
necessarily support
- Synced a few of the commands that have added new optional fields that
have since been added to Bitcoin Core
- Includes all of the commands and notifications that were previously in
btcws
- Now provides 100% test coverage with parallel tests
- The code is completely golint and go vet clean
This has the side effect of addressing nearly everything in, and therefore
closes #26.
Also fixes #18 and closes #19.
2014-12-31 08:05:03 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// NewSearchRawTransactionsCmd returns a new instance which can be used to issue a
|
|
|
|
// sendrawtransaction JSON-RPC command.
|
|
|
|
//
|
|
|
|
// The parameters which are pointers indicate they are optional. Passing nil
|
|
|
|
// for optional parameters will use the default value.
|
2015-11-16 00:30:13 +01:00
|
|
|
func NewSearchRawTransactionsCmd(address string, verbose, skip, count *int, vinExtra *int, reverse *bool, filterAddrs *[]string) *SearchRawTransactionsCmd {
|
Reimagine btcjson package with version 2.
This commit implements a reimagining of the way the btcjson package
functions based upon how the project has evolved and lessons learned while
using it since it was first written. It therefore contains significant
changes to the API. For now, it has been implemented in a v2 subdirectory
to prevent breaking existing callers, but the ultimate goal is to update
all callers to use the new version and then to replace the old API with
the new one.
This also removes the need for the btcws completely since those commands
have been rolled in.
The following is an overview of the changes and some reasoning behind why
they were made:
- The infrastructure has been completely changed to be reflection based instead
of requiring thousands and thousands of lines of manual, and therefore error
prone, marshal/unmarshal code
- This makes it much easier to add new commands without making marshalling
mistakes since it is simply a struct definition and a call to register that
new struct (plus a trivial New<foo>Cmd function and tests, of course)
- It also makes it much easier to gain a lot of information from simply
looking at the struct definition which was previously not possible
such as the order of the parameters, which parameters are required
versus optional, and what the default values for optional parameters
are
- Each command now has usage flags associated with them that can be
queried which are intended to allow classification of the commands such
as for chain server and wallet server and websocket-only
- The help infrastructure has been completely redone to provide automatic
generation with caller provided description map and result types. This
is in contrast to the previous method of providing the help directly
which meant it would end up in the binary of anything that imported the
package
- Many of the structs have been renamed to use the terminology from the
JSON-RPC
specification:
- RawCmd/Message is now only a single struct named Request to reflect the fact
it is a JSON-RPC request
- Error is now called RPCError to reflect the fact it is specifically an RPC
error as opposed to many of the other errors that are possible
- All RPC error codes except the standard JSON-RPC 2.0 errors have been
converted from full structs to only codes since an audit of the codebase
has shown that the messages are overridden the vast majority of the time
with specifics (as they should be) and removing them also avoids the
temptation to return non-specific, and therefore not as helpful, error
messages
- There is now an Error which provides a type assertable error with
error codes so callers can better ascertain failure reasons
programatically
- The ID is no longer a part of the command and is instead specified at the time
the command is marshalled into a JSON-RPC request. This aligns better with
the way JSON-RPC functions since it is the caller who manages the ID that is
sent with any given _request_, not the package
- All <Foo>Cmd structs now treat non-pointers as required fields and pointers as
optional fields
- All New<Foo>Cmd functions now accept the exact number of parameters, with
pointers to the appropriate type for optional parameters
- This is preferrable to the old vararg syntax since it means the code will
fail to compile if the optional arguments are changed now which helps
prevent errors creep in over time from missed modifications to optional args
- All of the connection related code has been completely eliminated since this
package is not intended to used a client, rather it is intended to provide
the infrastructure needed to marshal/unmarshal Bitcoin-specific JSON-RPC
requests and replies from static types
- The btcrpcclient package provides a robust client with connection management
and higher-level types that in turn uses the primitives provided by this
package
- Even if the caller does not wish to use btcrpcclient for some reason, they
should still be responsible for connection management since they might want
to use any number of connection features which the package would not
necessarily support
- Synced a few of the commands that have added new optional fields that
have since been added to Bitcoin Core
- Includes all of the commands and notifications that were previously in
btcws
- Now provides 100% test coverage with parallel tests
- The code is completely golint and go vet clean
This has the side effect of addressing nearly everything in, and therefore
closes #26.
Also fixes #18 and closes #19.
2014-12-31 08:05:03 +01:00
|
|
|
return &SearchRawTransactionsCmd{
|
2015-11-16 00:30:13 +01:00
|
|
|
Address: address,
|
|
|
|
Verbose: verbose,
|
|
|
|
Skip: skip,
|
|
|
|
Count: count,
|
|
|
|
VinExtra: vinExtra,
|
|
|
|
Reverse: reverse,
|
|
|
|
FilterAddrs: filterAddrs,
|
Reimagine btcjson package with version 2.
This commit implements a reimagining of the way the btcjson package
functions based upon how the project has evolved and lessons learned while
using it since it was first written. It therefore contains significant
changes to the API. For now, it has been implemented in a v2 subdirectory
to prevent breaking existing callers, but the ultimate goal is to update
all callers to use the new version and then to replace the old API with
the new one.
This also removes the need for the btcws completely since those commands
have been rolled in.
The following is an overview of the changes and some reasoning behind why
they were made:
- The infrastructure has been completely changed to be reflection based instead
of requiring thousands and thousands of lines of manual, and therefore error
prone, marshal/unmarshal code
- This makes it much easier to add new commands without making marshalling
mistakes since it is simply a struct definition and a call to register that
new struct (plus a trivial New<foo>Cmd function and tests, of course)
- It also makes it much easier to gain a lot of information from simply
looking at the struct definition which was previously not possible
such as the order of the parameters, which parameters are required
versus optional, and what the default values for optional parameters
are
- Each command now has usage flags associated with them that can be
queried which are intended to allow classification of the commands such
as for chain server and wallet server and websocket-only
- The help infrastructure has been completely redone to provide automatic
generation with caller provided description map and result types. This
is in contrast to the previous method of providing the help directly
which meant it would end up in the binary of anything that imported the
package
- Many of the structs have been renamed to use the terminology from the
JSON-RPC
specification:
- RawCmd/Message is now only a single struct named Request to reflect the fact
it is a JSON-RPC request
- Error is now called RPCError to reflect the fact it is specifically an RPC
error as opposed to many of the other errors that are possible
- All RPC error codes except the standard JSON-RPC 2.0 errors have been
converted from full structs to only codes since an audit of the codebase
has shown that the messages are overridden the vast majority of the time
with specifics (as they should be) and removing them also avoids the
temptation to return non-specific, and therefore not as helpful, error
messages
- There is now an Error which provides a type assertable error with
error codes so callers can better ascertain failure reasons
programatically
- The ID is no longer a part of the command and is instead specified at the time
the command is marshalled into a JSON-RPC request. This aligns better with
the way JSON-RPC functions since it is the caller who manages the ID that is
sent with any given _request_, not the package
- All <Foo>Cmd structs now treat non-pointers as required fields and pointers as
optional fields
- All New<Foo>Cmd functions now accept the exact number of parameters, with
pointers to the appropriate type for optional parameters
- This is preferrable to the old vararg syntax since it means the code will
fail to compile if the optional arguments are changed now which helps
prevent errors creep in over time from missed modifications to optional args
- All of the connection related code has been completely eliminated since this
package is not intended to used a client, rather it is intended to provide
the infrastructure needed to marshal/unmarshal Bitcoin-specific JSON-RPC
requests and replies from static types
- The btcrpcclient package provides a robust client with connection management
and higher-level types that in turn uses the primitives provided by this
package
- Even if the caller does not wish to use btcrpcclient for some reason, they
should still be responsible for connection management since they might want
to use any number of connection features which the package would not
necessarily support
- Synced a few of the commands that have added new optional fields that
have since been added to Bitcoin Core
- Includes all of the commands and notifications that were previously in
btcws
- Now provides 100% test coverage with parallel tests
- The code is completely golint and go vet clean
This has the side effect of addressing nearly everything in, and therefore
closes #26.
Also fixes #18 and closes #19.
2014-12-31 08:05:03 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// SendRawTransactionCmd defines the sendrawtransaction JSON-RPC command.
|
|
|
|
type SendRawTransactionCmd struct {
|
|
|
|
HexTx string
|
|
|
|
AllowHighFees *bool `jsonrpcdefault:"false"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewSendRawTransactionCmd returns a new instance which can be used to issue a
|
|
|
|
// sendrawtransaction JSON-RPC command.
|
|
|
|
//
|
|
|
|
// The parameters which are pointers indicate they are optional. Passing nil
|
|
|
|
// for optional parameters will use the default value.
|
|
|
|
func NewSendRawTransactionCmd(hexTx string, allowHighFees *bool) *SendRawTransactionCmd {
|
|
|
|
return &SendRawTransactionCmd{
|
|
|
|
HexTx: hexTx,
|
|
|
|
AllowHighFees: allowHighFees,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// SetGenerateCmd defines the setgenerate JSON-RPC command.
|
|
|
|
type SetGenerateCmd struct {
|
|
|
|
Generate bool
|
|
|
|
GenProcLimit *int `jsonrpcdefault:"-1"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewSetGenerateCmd returns a new instance which can be used to issue a
|
|
|
|
// setgenerate JSON-RPC command.
|
|
|
|
//
|
|
|
|
// The parameters which are pointers indicate they are optional. Passing nil
|
|
|
|
// for optional parameters will use the default value.
|
|
|
|
func NewSetGenerateCmd(generate bool, genProcLimit *int) *SetGenerateCmd {
|
|
|
|
return &SetGenerateCmd{
|
|
|
|
Generate: generate,
|
|
|
|
GenProcLimit: genProcLimit,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// StopCmd defines the stop JSON-RPC command.
|
|
|
|
type StopCmd struct{}
|
|
|
|
|
|
|
|
// NewStopCmd returns a new instance which can be used to issue a stop JSON-RPC
|
|
|
|
// command.
|
|
|
|
func NewStopCmd() *StopCmd {
|
|
|
|
return &StopCmd{}
|
|
|
|
}
|
|
|
|
|
|
|
|
// 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 defines the submitblock JSON-RPC command.
|
|
|
|
type SubmitBlockCmd struct {
|
|
|
|
HexBlock string
|
|
|
|
Options *SubmitBlockOptions
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewSubmitBlockCmd returns a new instance which can be used to issue a
|
|
|
|
// submitblock JSON-RPC command.
|
|
|
|
//
|
|
|
|
// The parameters which are pointers indicate they are optional. Passing nil
|
|
|
|
// for optional parameters will use the default value.
|
|
|
|
func NewSubmitBlockCmd(hexBlock string, options *SubmitBlockOptions) *SubmitBlockCmd {
|
|
|
|
return &SubmitBlockCmd{
|
|
|
|
HexBlock: hexBlock,
|
|
|
|
Options: options,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// ValidateAddressCmd defines the validateaddress JSON-RPC command.
|
|
|
|
type ValidateAddressCmd struct {
|
|
|
|
Address string
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewValidateAddressCmd returns a new instance which can be used to issue a
|
|
|
|
// validateaddress JSON-RPC command.
|
|
|
|
func NewValidateAddressCmd(address string) *ValidateAddressCmd {
|
|
|
|
return &ValidateAddressCmd{
|
|
|
|
Address: address,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// VerifyChainCmd defines the verifychain JSON-RPC command.
|
|
|
|
type VerifyChainCmd struct {
|
|
|
|
CheckLevel *int32 `jsonrpcdefault:"3"`
|
|
|
|
CheckDepth *int32 `jsonrpcdefault:"288"` // 0 = all
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewVerifyChainCmd returns a new instance which can be used to issue a
|
|
|
|
// verifychain JSON-RPC command.
|
|
|
|
//
|
|
|
|
// The parameters which are pointers indicate they are optional. Passing nil
|
|
|
|
// for optional parameters will use the default value.
|
|
|
|
func NewVerifyChainCmd(checkLevel, checkDepth *int32) *VerifyChainCmd {
|
|
|
|
return &VerifyChainCmd{
|
|
|
|
CheckLevel: checkLevel,
|
|
|
|
CheckDepth: checkDepth,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// VerifyMessageCmd defines the verifymessage JSON-RPC command.
|
|
|
|
type VerifyMessageCmd struct {
|
|
|
|
Address string
|
|
|
|
Signature string
|
|
|
|
Message string
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewVerifyMessageCmd returns a new instance which can be used to issue a
|
|
|
|
// verifymessage JSON-RPC command.
|
|
|
|
func NewVerifyMessageCmd(address, signature, message string) *VerifyMessageCmd {
|
|
|
|
return &VerifyMessageCmd{
|
|
|
|
Address: address,
|
|
|
|
Signature: signature,
|
|
|
|
Message: message,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-05-07 17:58:12 +02:00
|
|
|
// VerifyTxOutProofCmd defines the verifytxoutproof JSON-RPC command.
|
|
|
|
type VerifyTxOutProofCmd struct {
|
|
|
|
Proof string
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewVerifyTxOutProofCmd returns a new instance which can be used to issue a
|
|
|
|
// verifytxoutproof JSON-RPC command.
|
|
|
|
func NewVerifyTxOutProofCmd(proof string) *VerifyTxOutProofCmd {
|
|
|
|
return &VerifyTxOutProofCmd{
|
|
|
|
Proof: proof,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
Reimagine btcjson package with version 2.
This commit implements a reimagining of the way the btcjson package
functions based upon how the project has evolved and lessons learned while
using it since it was first written. It therefore contains significant
changes to the API. For now, it has been implemented in a v2 subdirectory
to prevent breaking existing callers, but the ultimate goal is to update
all callers to use the new version and then to replace the old API with
the new one.
This also removes the need for the btcws completely since those commands
have been rolled in.
The following is an overview of the changes and some reasoning behind why
they were made:
- The infrastructure has been completely changed to be reflection based instead
of requiring thousands and thousands of lines of manual, and therefore error
prone, marshal/unmarshal code
- This makes it much easier to add new commands without making marshalling
mistakes since it is simply a struct definition and a call to register that
new struct (plus a trivial New<foo>Cmd function and tests, of course)
- It also makes it much easier to gain a lot of information from simply
looking at the struct definition which was previously not possible
such as the order of the parameters, which parameters are required
versus optional, and what the default values for optional parameters
are
- Each command now has usage flags associated with them that can be
queried which are intended to allow classification of the commands such
as for chain server and wallet server and websocket-only
- The help infrastructure has been completely redone to provide automatic
generation with caller provided description map and result types. This
is in contrast to the previous method of providing the help directly
which meant it would end up in the binary of anything that imported the
package
- Many of the structs have been renamed to use the terminology from the
JSON-RPC
specification:
- RawCmd/Message is now only a single struct named Request to reflect the fact
it is a JSON-RPC request
- Error is now called RPCError to reflect the fact it is specifically an RPC
error as opposed to many of the other errors that are possible
- All RPC error codes except the standard JSON-RPC 2.0 errors have been
converted from full structs to only codes since an audit of the codebase
has shown that the messages are overridden the vast majority of the time
with specifics (as they should be) and removing them also avoids the
temptation to return non-specific, and therefore not as helpful, error
messages
- There is now an Error which provides a type assertable error with
error codes so callers can better ascertain failure reasons
programatically
- The ID is no longer a part of the command and is instead specified at the time
the command is marshalled into a JSON-RPC request. This aligns better with
the way JSON-RPC functions since it is the caller who manages the ID that is
sent with any given _request_, not the package
- All <Foo>Cmd structs now treat non-pointers as required fields and pointers as
optional fields
- All New<Foo>Cmd functions now accept the exact number of parameters, with
pointers to the appropriate type for optional parameters
- This is preferrable to the old vararg syntax since it means the code will
fail to compile if the optional arguments are changed now which helps
prevent errors creep in over time from missed modifications to optional args
- All of the connection related code has been completely eliminated since this
package is not intended to used a client, rather it is intended to provide
the infrastructure needed to marshal/unmarshal Bitcoin-specific JSON-RPC
requests and replies from static types
- The btcrpcclient package provides a robust client with connection management
and higher-level types that in turn uses the primitives provided by this
package
- Even if the caller does not wish to use btcrpcclient for some reason, they
should still be responsible for connection management since they might want
to use any number of connection features which the package would not
necessarily support
- Synced a few of the commands that have added new optional fields that
have since been added to Bitcoin Core
- Includes all of the commands and notifications that were previously in
btcws
- Now provides 100% test coverage with parallel tests
- The code is completely golint and go vet clean
This has the side effect of addressing nearly everything in, and therefore
closes #26.
Also fixes #18 and closes #19.
2014-12-31 08:05:03 +01:00
|
|
|
func init() {
|
|
|
|
// No special flags for commands in this file.
|
|
|
|
flags := UsageFlag(0)
|
|
|
|
|
|
|
|
MustRegisterCmd("addnode", (*AddNodeCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("createrawtransaction", (*CreateRawTransactionCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("decoderawtransaction", (*DecodeRawTransactionCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("decodescript", (*DecodeScriptCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("getaddednodeinfo", (*GetAddedNodeInfoCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("getbestblockhash", (*GetBestBlockHashCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("getblock", (*GetBlockCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("getblockchaininfo", (*GetBlockChainInfoCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("getblockcount", (*GetBlockCountCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("getblockhash", (*GetBlockHashCmd)(nil), flags)
|
2015-07-04 19:42:43 +02:00
|
|
|
MustRegisterCmd("getblockheader", (*GetBlockHeaderCmd)(nil), flags)
|
Reimagine btcjson package with version 2.
This commit implements a reimagining of the way the btcjson package
functions based upon how the project has evolved and lessons learned while
using it since it was first written. It therefore contains significant
changes to the API. For now, it has been implemented in a v2 subdirectory
to prevent breaking existing callers, but the ultimate goal is to update
all callers to use the new version and then to replace the old API with
the new one.
This also removes the need for the btcws completely since those commands
have been rolled in.
The following is an overview of the changes and some reasoning behind why
they were made:
- The infrastructure has been completely changed to be reflection based instead
of requiring thousands and thousands of lines of manual, and therefore error
prone, marshal/unmarshal code
- This makes it much easier to add new commands without making marshalling
mistakes since it is simply a struct definition and a call to register that
new struct (plus a trivial New<foo>Cmd function and tests, of course)
- It also makes it much easier to gain a lot of information from simply
looking at the struct definition which was previously not possible
such as the order of the parameters, which parameters are required
versus optional, and what the default values for optional parameters
are
- Each command now has usage flags associated with them that can be
queried which are intended to allow classification of the commands such
as for chain server and wallet server and websocket-only
- The help infrastructure has been completely redone to provide automatic
generation with caller provided description map and result types. This
is in contrast to the previous method of providing the help directly
which meant it would end up in the binary of anything that imported the
package
- Many of the structs have been renamed to use the terminology from the
JSON-RPC
specification:
- RawCmd/Message is now only a single struct named Request to reflect the fact
it is a JSON-RPC request
- Error is now called RPCError to reflect the fact it is specifically an RPC
error as opposed to many of the other errors that are possible
- All RPC error codes except the standard JSON-RPC 2.0 errors have been
converted from full structs to only codes since an audit of the codebase
has shown that the messages are overridden the vast majority of the time
with specifics (as they should be) and removing them also avoids the
temptation to return non-specific, and therefore not as helpful, error
messages
- There is now an Error which provides a type assertable error with
error codes so callers can better ascertain failure reasons
programatically
- The ID is no longer a part of the command and is instead specified at the time
the command is marshalled into a JSON-RPC request. This aligns better with
the way JSON-RPC functions since it is the caller who manages the ID that is
sent with any given _request_, not the package
- All <Foo>Cmd structs now treat non-pointers as required fields and pointers as
optional fields
- All New<Foo>Cmd functions now accept the exact number of parameters, with
pointers to the appropriate type for optional parameters
- This is preferrable to the old vararg syntax since it means the code will
fail to compile if the optional arguments are changed now which helps
prevent errors creep in over time from missed modifications to optional args
- All of the connection related code has been completely eliminated since this
package is not intended to used a client, rather it is intended to provide
the infrastructure needed to marshal/unmarshal Bitcoin-specific JSON-RPC
requests and replies from static types
- The btcrpcclient package provides a robust client with connection management
and higher-level types that in turn uses the primitives provided by this
package
- Even if the caller does not wish to use btcrpcclient for some reason, they
should still be responsible for connection management since they might want
to use any number of connection features which the package would not
necessarily support
- Synced a few of the commands that have added new optional fields that
have since been added to Bitcoin Core
- Includes all of the commands and notifications that were previously in
btcws
- Now provides 100% test coverage with parallel tests
- The code is completely golint and go vet clean
This has the side effect of addressing nearly everything in, and therefore
closes #26.
Also fixes #18 and closes #19.
2014-12-31 08:05:03 +01:00
|
|
|
MustRegisterCmd("getblocktemplate", (*GetBlockTemplateCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("getchaintips", (*GetChainTipsCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("getconnectioncount", (*GetConnectionCountCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("getdifficulty", (*GetDifficultyCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("getgenerate", (*GetGenerateCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("gethashespersec", (*GetHashesPerSecCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("getinfo", (*GetInfoCmd)(nil), flags)
|
2017-01-23 20:57:14 +01:00
|
|
|
MustRegisterCmd("getmempoolentry", (*GetMempoolEntryCmd)(nil), flags)
|
Reimagine btcjson package with version 2.
This commit implements a reimagining of the way the btcjson package
functions based upon how the project has evolved and lessons learned while
using it since it was first written. It therefore contains significant
changes to the API. For now, it has been implemented in a v2 subdirectory
to prevent breaking existing callers, but the ultimate goal is to update
all callers to use the new version and then to replace the old API with
the new one.
This also removes the need for the btcws completely since those commands
have been rolled in.
The following is an overview of the changes and some reasoning behind why
they were made:
- The infrastructure has been completely changed to be reflection based instead
of requiring thousands and thousands of lines of manual, and therefore error
prone, marshal/unmarshal code
- This makes it much easier to add new commands without making marshalling
mistakes since it is simply a struct definition and a call to register that
new struct (plus a trivial New<foo>Cmd function and tests, of course)
- It also makes it much easier to gain a lot of information from simply
looking at the struct definition which was previously not possible
such as the order of the parameters, which parameters are required
versus optional, and what the default values for optional parameters
are
- Each command now has usage flags associated with them that can be
queried which are intended to allow classification of the commands such
as for chain server and wallet server and websocket-only
- The help infrastructure has been completely redone to provide automatic
generation with caller provided description map and result types. This
is in contrast to the previous method of providing the help directly
which meant it would end up in the binary of anything that imported the
package
- Many of the structs have been renamed to use the terminology from the
JSON-RPC
specification:
- RawCmd/Message is now only a single struct named Request to reflect the fact
it is a JSON-RPC request
- Error is now called RPCError to reflect the fact it is specifically an RPC
error as opposed to many of the other errors that are possible
- All RPC error codes except the standard JSON-RPC 2.0 errors have been
converted from full structs to only codes since an audit of the codebase
has shown that the messages are overridden the vast majority of the time
with specifics (as they should be) and removing them also avoids the
temptation to return non-specific, and therefore not as helpful, error
messages
- There is now an Error which provides a type assertable error with
error codes so callers can better ascertain failure reasons
programatically
- The ID is no longer a part of the command and is instead specified at the time
the command is marshalled into a JSON-RPC request. This aligns better with
the way JSON-RPC functions since it is the caller who manages the ID that is
sent with any given _request_, not the package
- All <Foo>Cmd structs now treat non-pointers as required fields and pointers as
optional fields
- All New<Foo>Cmd functions now accept the exact number of parameters, with
pointers to the appropriate type for optional parameters
- This is preferrable to the old vararg syntax since it means the code will
fail to compile if the optional arguments are changed now which helps
prevent errors creep in over time from missed modifications to optional args
- All of the connection related code has been completely eliminated since this
package is not intended to used a client, rather it is intended to provide
the infrastructure needed to marshal/unmarshal Bitcoin-specific JSON-RPC
requests and replies from static types
- The btcrpcclient package provides a robust client with connection management
and higher-level types that in turn uses the primitives provided by this
package
- Even if the caller does not wish to use btcrpcclient for some reason, they
should still be responsible for connection management since they might want
to use any number of connection features which the package would not
necessarily support
- Synced a few of the commands that have added new optional fields that
have since been added to Bitcoin Core
- Includes all of the commands and notifications that were previously in
btcws
- Now provides 100% test coverage with parallel tests
- The code is completely golint and go vet clean
This has the side effect of addressing nearly everything in, and therefore
closes #26.
Also fixes #18 and closes #19.
2014-12-31 08:05:03 +01:00
|
|
|
MustRegisterCmd("getmempoolinfo", (*GetMempoolInfoCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("getmininginfo", (*GetMiningInfoCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("getnetworkinfo", (*GetNetworkInfoCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("getnettotals", (*GetNetTotalsCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("getnetworkhashps", (*GetNetworkHashPSCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("getpeerinfo", (*GetPeerInfoCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("getrawmempool", (*GetRawMempoolCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("getrawtransaction", (*GetRawTransactionCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("gettxout", (*GetTxOutCmd)(nil), flags)
|
2015-05-07 17:58:12 +02:00
|
|
|
MustRegisterCmd("gettxoutproof", (*GetTxOutProofCmd)(nil), flags)
|
Reimagine btcjson package with version 2.
This commit implements a reimagining of the way the btcjson package
functions based upon how the project has evolved and lessons learned while
using it since it was first written. It therefore contains significant
changes to the API. For now, it has been implemented in a v2 subdirectory
to prevent breaking existing callers, but the ultimate goal is to update
all callers to use the new version and then to replace the old API with
the new one.
This also removes the need for the btcws completely since those commands
have been rolled in.
The following is an overview of the changes and some reasoning behind why
they were made:
- The infrastructure has been completely changed to be reflection based instead
of requiring thousands and thousands of lines of manual, and therefore error
prone, marshal/unmarshal code
- This makes it much easier to add new commands without making marshalling
mistakes since it is simply a struct definition and a call to register that
new struct (plus a trivial New<foo>Cmd function and tests, of course)
- It also makes it much easier to gain a lot of information from simply
looking at the struct definition which was previously not possible
such as the order of the parameters, which parameters are required
versus optional, and what the default values for optional parameters
are
- Each command now has usage flags associated with them that can be
queried which are intended to allow classification of the commands such
as for chain server and wallet server and websocket-only
- The help infrastructure has been completely redone to provide automatic
generation with caller provided description map and result types. This
is in contrast to the previous method of providing the help directly
which meant it would end up in the binary of anything that imported the
package
- Many of the structs have been renamed to use the terminology from the
JSON-RPC
specification:
- RawCmd/Message is now only a single struct named Request to reflect the fact
it is a JSON-RPC request
- Error is now called RPCError to reflect the fact it is specifically an RPC
error as opposed to many of the other errors that are possible
- All RPC error codes except the standard JSON-RPC 2.0 errors have been
converted from full structs to only codes since an audit of the codebase
has shown that the messages are overridden the vast majority of the time
with specifics (as they should be) and removing them also avoids the
temptation to return non-specific, and therefore not as helpful, error
messages
- There is now an Error which provides a type assertable error with
error codes so callers can better ascertain failure reasons
programatically
- The ID is no longer a part of the command and is instead specified at the time
the command is marshalled into a JSON-RPC request. This aligns better with
the way JSON-RPC functions since it is the caller who manages the ID that is
sent with any given _request_, not the package
- All <Foo>Cmd structs now treat non-pointers as required fields and pointers as
optional fields
- All New<Foo>Cmd functions now accept the exact number of parameters, with
pointers to the appropriate type for optional parameters
- This is preferrable to the old vararg syntax since it means the code will
fail to compile if the optional arguments are changed now which helps
prevent errors creep in over time from missed modifications to optional args
- All of the connection related code has been completely eliminated since this
package is not intended to used a client, rather it is intended to provide
the infrastructure needed to marshal/unmarshal Bitcoin-specific JSON-RPC
requests and replies from static types
- The btcrpcclient package provides a robust client with connection management
and higher-level types that in turn uses the primitives provided by this
package
- Even if the caller does not wish to use btcrpcclient for some reason, they
should still be responsible for connection management since they might want
to use any number of connection features which the package would not
necessarily support
- Synced a few of the commands that have added new optional fields that
have since been added to Bitcoin Core
- Includes all of the commands and notifications that were previously in
btcws
- Now provides 100% test coverage with parallel tests
- The code is completely golint and go vet clean
This has the side effect of addressing nearly everything in, and therefore
closes #26.
Also fixes #18 and closes #19.
2014-12-31 08:05:03 +01:00
|
|
|
MustRegisterCmd("gettxoutsetinfo", (*GetTxOutSetInfoCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("getwork", (*GetWorkCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("help", (*HelpCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("invalidateblock", (*InvalidateBlockCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("ping", (*PingCmd)(nil), flags)
|
2016-10-19 20:02:52 +02:00
|
|
|
MustRegisterCmd("preciousblock", (*PreciousBlockCmd)(nil), flags)
|
Reimagine btcjson package with version 2.
This commit implements a reimagining of the way the btcjson package
functions based upon how the project has evolved and lessons learned while
using it since it was first written. It therefore contains significant
changes to the API. For now, it has been implemented in a v2 subdirectory
to prevent breaking existing callers, but the ultimate goal is to update
all callers to use the new version and then to replace the old API with
the new one.
This also removes the need for the btcws completely since those commands
have been rolled in.
The following is an overview of the changes and some reasoning behind why
they were made:
- The infrastructure has been completely changed to be reflection based instead
of requiring thousands and thousands of lines of manual, and therefore error
prone, marshal/unmarshal code
- This makes it much easier to add new commands without making marshalling
mistakes since it is simply a struct definition and a call to register that
new struct (plus a trivial New<foo>Cmd function and tests, of course)
- It also makes it much easier to gain a lot of information from simply
looking at the struct definition which was previously not possible
such as the order of the parameters, which parameters are required
versus optional, and what the default values for optional parameters
are
- Each command now has usage flags associated with them that can be
queried which are intended to allow classification of the commands such
as for chain server and wallet server and websocket-only
- The help infrastructure has been completely redone to provide automatic
generation with caller provided description map and result types. This
is in contrast to the previous method of providing the help directly
which meant it would end up in the binary of anything that imported the
package
- Many of the structs have been renamed to use the terminology from the
JSON-RPC
specification:
- RawCmd/Message is now only a single struct named Request to reflect the fact
it is a JSON-RPC request
- Error is now called RPCError to reflect the fact it is specifically an RPC
error as opposed to many of the other errors that are possible
- All RPC error codes except the standard JSON-RPC 2.0 errors have been
converted from full structs to only codes since an audit of the codebase
has shown that the messages are overridden the vast majority of the time
with specifics (as they should be) and removing them also avoids the
temptation to return non-specific, and therefore not as helpful, error
messages
- There is now an Error which provides a type assertable error with
error codes so callers can better ascertain failure reasons
programatically
- The ID is no longer a part of the command and is instead specified at the time
the command is marshalled into a JSON-RPC request. This aligns better with
the way JSON-RPC functions since it is the caller who manages the ID that is
sent with any given _request_, not the package
- All <Foo>Cmd structs now treat non-pointers as required fields and pointers as
optional fields
- All New<Foo>Cmd functions now accept the exact number of parameters, with
pointers to the appropriate type for optional parameters
- This is preferrable to the old vararg syntax since it means the code will
fail to compile if the optional arguments are changed now which helps
prevent errors creep in over time from missed modifications to optional args
- All of the connection related code has been completely eliminated since this
package is not intended to used a client, rather it is intended to provide
the infrastructure needed to marshal/unmarshal Bitcoin-specific JSON-RPC
requests and replies from static types
- The btcrpcclient package provides a robust client with connection management
and higher-level types that in turn uses the primitives provided by this
package
- Even if the caller does not wish to use btcrpcclient for some reason, they
should still be responsible for connection management since they might want
to use any number of connection features which the package would not
necessarily support
- Synced a few of the commands that have added new optional fields that
have since been added to Bitcoin Core
- Includes all of the commands and notifications that were previously in
btcws
- Now provides 100% test coverage with parallel tests
- The code is completely golint and go vet clean
This has the side effect of addressing nearly everything in, and therefore
closes #26.
Also fixes #18 and closes #19.
2014-12-31 08:05:03 +01:00
|
|
|
MustRegisterCmd("reconsiderblock", (*ReconsiderBlockCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("searchrawtransactions", (*SearchRawTransactionsCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("sendrawtransaction", (*SendRawTransactionCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("setgenerate", (*SetGenerateCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("stop", (*StopCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("submitblock", (*SubmitBlockCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("validateaddress", (*ValidateAddressCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("verifychain", (*VerifyChainCmd)(nil), flags)
|
|
|
|
MustRegisterCmd("verifymessage", (*VerifyMessageCmd)(nil), flags)
|
2015-05-07 17:58:12 +02:00
|
|
|
MustRegisterCmd("verifytxoutproof", (*VerifyTxOutProofCmd)(nil), flags)
|
Reimagine btcjson package with version 2.
This commit implements a reimagining of the way the btcjson package
functions based upon how the project has evolved and lessons learned while
using it since it was first written. It therefore contains significant
changes to the API. For now, it has been implemented in a v2 subdirectory
to prevent breaking existing callers, but the ultimate goal is to update
all callers to use the new version and then to replace the old API with
the new one.
This also removes the need for the btcws completely since those commands
have been rolled in.
The following is an overview of the changes and some reasoning behind why
they were made:
- The infrastructure has been completely changed to be reflection based instead
of requiring thousands and thousands of lines of manual, and therefore error
prone, marshal/unmarshal code
- This makes it much easier to add new commands without making marshalling
mistakes since it is simply a struct definition and a call to register that
new struct (plus a trivial New<foo>Cmd function and tests, of course)
- It also makes it much easier to gain a lot of information from simply
looking at the struct definition which was previously not possible
such as the order of the parameters, which parameters are required
versus optional, and what the default values for optional parameters
are
- Each command now has usage flags associated with them that can be
queried which are intended to allow classification of the commands such
as for chain server and wallet server and websocket-only
- The help infrastructure has been completely redone to provide automatic
generation with caller provided description map and result types. This
is in contrast to the previous method of providing the help directly
which meant it would end up in the binary of anything that imported the
package
- Many of the structs have been renamed to use the terminology from the
JSON-RPC
specification:
- RawCmd/Message is now only a single struct named Request to reflect the fact
it is a JSON-RPC request
- Error is now called RPCError to reflect the fact it is specifically an RPC
error as opposed to many of the other errors that are possible
- All RPC error codes except the standard JSON-RPC 2.0 errors have been
converted from full structs to only codes since an audit of the codebase
has shown that the messages are overridden the vast majority of the time
with specifics (as they should be) and removing them also avoids the
temptation to return non-specific, and therefore not as helpful, error
messages
- There is now an Error which provides a type assertable error with
error codes so callers can better ascertain failure reasons
programatically
- The ID is no longer a part of the command and is instead specified at the time
the command is marshalled into a JSON-RPC request. This aligns better with
the way JSON-RPC functions since it is the caller who manages the ID that is
sent with any given _request_, not the package
- All <Foo>Cmd structs now treat non-pointers as required fields and pointers as
optional fields
- All New<Foo>Cmd functions now accept the exact number of parameters, with
pointers to the appropriate type for optional parameters
- This is preferrable to the old vararg syntax since it means the code will
fail to compile if the optional arguments are changed now which helps
prevent errors creep in over time from missed modifications to optional args
- All of the connection related code has been completely eliminated since this
package is not intended to used a client, rather it is intended to provide
the infrastructure needed to marshal/unmarshal Bitcoin-specific JSON-RPC
requests and replies from static types
- The btcrpcclient package provides a robust client with connection management
and higher-level types that in turn uses the primitives provided by this
package
- Even if the caller does not wish to use btcrpcclient for some reason, they
should still be responsible for connection management since they might want
to use any number of connection features which the package would not
necessarily support
- Synced a few of the commands that have added new optional fields that
have since been added to Bitcoin Core
- Includes all of the commands and notifications that were previously in
btcws
- Now provides 100% test coverage with parallel tests
- The code is completely golint and go vet clean
This has the side effect of addressing nearly everything in, and therefore
closes #26.
Also fixes #18 and closes #19.
2014-12-31 08:05:03 +01:00
|
|
|
}
|