Commit graph

2917 commits

Author SHA1 Message Date
David Hill
2e029b1c3d Add gettxout to btcctl. 2014-07-04 10:50:57 -04:00
David Hill
2e0a243383 Support gettxout 2014-07-04 10:46:21 -04:00
Dave Collins
29a3bb6e69 Remove disconnect on unrequested transaction.
BitcoinJ, and possibly other wallets, don't follow the spec of sending an
inventory message and allowing the remote peer to decide whether or not
they want to request the transaction via a getdata message.  Unfortuantely
the reference implementation permits unrequested data, so it has allowed
wallets that don't follow the spec to proliferate.

While this is not ideal, this commit removes the functionality which
disconnects peers for sending unsolicited transactions to provide
interoperability.
2014-07-03 20:59:41 -05:00
Dave Collins
a546fa1b2a Correct getdata throttling.
This commit corrects an issue where the data requested by getdata was not
being properly throttled which could lead to higher than desired memory
usage on large requests.
2014-07-03 16:58:36 -05:00
David Hill
79fe7aadd6 Log an error when json encoding of peers.json fails. 2014-07-03 14:33:56 -04:00
Dave Collins
1a866200e3 Improve websocket connection error handling.
This commit modifies the error handling for websocket connections to fall
back to returning the status text returned from the server if the
handshake fails and it's not due to an authentication or invalid endpoint.
2014-07-03 12:31:53 -05:00
Tomás Senart
77fdb1011b Handle non successfull HTTP responses
This change set equips the RPC client with handling of non successful
HTTP responses. An HTTP response is considered non successful when its
status code is not in the range 200..299
2014-07-03 18:54:50 +02:00
Josh Rickmar
5966a5230d Don't log error if getrawtransaction finds no tx.
ok @davecgh
2014-07-03 10:37:37 -05:00
David Hill
6f17ebc8cb Implement validateaddress.
validateaddress will simply return whether the given address is
valid or not.  For the full implementation, one should query
btcwallet instead.
2014-07-02 23:52:34 -04:00
Dave Collins
efb92fcc99 goimports -w . 2014-07-02 19:47:24 -05:00
Dave Collins
1acb4b8151 goimports -w . 2014-07-02 19:44:43 -05:00
Dave Collins
3a1009529f goimports -w . 2014-07-02 19:43:33 -05:00
Dave Collins
d7e4789eda goimports -w . 2014-07-02 19:42:29 -05:00
Dave Collins
6aa6bec7fc goimports -w . 2014-07-02 19:41:28 -05:00
Dave Collins
22014931d4 goimports -w . 2014-07-02 19:39:37 -05:00
Dave Collins
5beafbd2d8 goimports -w . 2014-07-02 19:37:49 -05:00
Dave Collins
79b6e51dff Update tests for recent btcutil.Address API change. 2014-07-02 19:36:41 -05:00
Dave Collins
0e463baf95 goimports -w . 2014-07-02 19:34:05 -05:00
Tomás Senart
4772d4a1a4 goimports -w . 2014-07-02 19:14:27 -05:00
Tomás Senart
f439dece37 Use chan struct{} for semaphores
With semaphores we don't actually care about the value passed in. It
makes sense to use a 0 bytes type in these cases.
There is also the added benefit of compiler optimisations for this
specific use case as described here:
https://docs.google.com/document/d/1yIAYmbvL3JxOKOjuCyon7JhW4cSv1wy5hC0ApeGMV9s/pub
2014-07-02 19:06:32 -05:00
Tomás Senart
cc2c486791 Replace map[a]bool with map[a]struct{}
The later uses no memory storage for values and provides the same
functionality.
2014-07-02 19:06:29 -05:00
Tomás Senart
76d258e2a1 Avoid reallocs in removeDuplicateAddresses 2014-07-02 11:01:57 -05:00
Tomás Senart
a0f20007c5 golint -min_confidence=0.3 .
This commits removes a number of golint warnings. There is a class of
warnings which I can't fix due to unsufficient knowledge of the domain
at this point. These are listed here:

addrmanager.go:907:1: comment on exported method AddrManager.Attempt
should be of the form "Attempt ..."
addrmanager.go:1048:1: exported function RFC1918 should have comment or
be unexported
addrmanager.go:1058:1: exported function RFC3849 should have comment or
be unexported
addrmanager.go:1065:1: exported function RFC3927 should have comment or
be unexported
addrmanager.go:1073:1: exported function RFC3964 should have comment or
be unexported
addrmanager.go:1081:1: exported function RFC4193 should have comment or
be unexported
addrmanager.go:1089:1: exported function RFC4380 should have comment or
be unexported
addrmanager.go:1097:1: exported function RFC4843 should have comment or
be unexported
addrmanager.go:1105:1: exported function RFC4862 should have comment or
be unexported
addrmanager.go:1113:1: exported function RFC6052 should have comment or
be unexported
addrmanager.go:1121:1: exported function RFC6145 should have comment or
be unexported
addrmanager.go:1128:1: exported function Tor should have comment or be
unexported
addrmanager.go:1143:1: exported function Local should have comment or be
unexported
addrmanager.go:1228:2: exported const InterfacePrio should have comment
(or a comment on this block) or be unexported
discovery.go:26:2: exported var ErrTorInvalidAddressResponse should have
comment or be unexported
limits/limits_unix.go:19:1: exported function SetLimits should have
comment or be unexported
limits/limits_windows.go:7:1: exported function SetLimits should have
comment or be unexported
util/dropafter/dropafter.go:22:6: exported type ShaHash should have
comment or be unexported
util/dropafter/dropafter.go:38:2: exported const ArgSha should have
comment (or a comment on this block) or be unexported
util/dropafter/dropafter.go:128:5: exported var ErrBadShaPrefix should
have comment or be unexported
util/dropafter/dropafter.go:129:5: exported var ErrBadShaLen should have
comment or be unexported
util/dropafter/dropafter.go:130:5: exported var ErrBadShaChar should
have comment or be unexported
util/showblock/showblock.go:24:6: exported type ShaHash should have
comment or be unexported
util/showblock/showblock.go:46:2: exported const ArgSha should have
comment (or a comment on this block) or be unexported
util/showblock/showblock.go:163:1: exported function DumpBlock should
have comment or be unexported
util/showblock/showblock.go:211:5: exported var ErrBadShaPrefix should
have comment or be unexported
util/showblock/showblock.go:212:5: exported var ErrBadShaLen should have
comment or be unexported
util/showblock/showblock.go:213:5: exported var ErrBadShaChar should
have comment or be unexported
2014-07-02 11:01:56 -05:00
Tomás Senart
73ed07bd85 Use chan struct{} for semaphores
With semaphores we don't actually care about the value passed in. It
makes sense to use a 0 bytes type in these cases.
There is also the added benefit of compiler optimisations for this
specific use case as described here:
https://docs.google.com/document/d/1yIAYmbvL3JxOKOjuCyon7JhW4cSv1wy5hC0ApeGMV9s/pub
2014-07-02 18:00:47 +02:00
Tomás Senart
e29f40274d Replace map[a]bool with map[a]struct{}
The later uses no memory storage for values and provides the same
functionality.
2014-07-02 17:56:22 +02:00
Tomás Senart
84fa553b65 Split imports into logical groups 2014-07-02 15:56:41 +02:00
Dave Collins
767caaa6ae Make hex decoding consistent in RPC handlers.
The hex package requires an even number of characters in hex encoded
strings.  Some of the handlers already prepended a zero if necessary to
make this condition true, however other did not.  This commit extends this
functionality to all handlers and also makes the error return consistent.

ok @jrick
2014-07-01 20:39:31 -05:00
Dave Collins
933cdf50e8 Export constant for the maximum time offset.
This commit creates and exports a new constant, MaxTimeOffsetSeconds,
which is the maximum number of seconds a block timestamp is allowed to be
ahead of the current time.

Previously this value was hard coded into the consensus rule path, however
it is useful better to have it defined as a constant and exported so other
callers can access it.

No consensus rules have been changed with this commit.
2014-06-30 12:14:58 -05:00
Dave Collins
2d32ed6ba7 Add MaxTime field support from BIP0023 mutations. 2014-06-30 10:38:15 -05:00
Josh Rickmar
130edaec65 Add ListLockUnspent support.
Closes #11.

ok @davecgh
2014-06-30 10:30:11 -05:00
Josh Rickmar
4c045cc1ec Add LockUnspent support.
Closes #10.

ok @davecgh
2014-06-30 10:30:10 -05:00
Dave Collins
dbca1d59c3 Add a new behavior flag to provide a dry run.
This commit adds a new behavior flag, BFDryRun which allows the caller
to indicate all checks should be performed against the block as normal
except it will not modify any state.  This is useful to test that a block
is valid without actually modifying the current chain or memory state.

This commit also adds a few additional checks which were elided before
since they are implicitly handled by btcwire.  However, with the ability
to propose blocks which didn't necessarily come through the btcwire path,
these checks need to be enforced in the chain code as well.

As a part of adding the checks, three new error codes named
ErrBlockTooBig, ErrTooManyTransactions, and ErrTxTooBig have been
introduced.

Closes #5.
2014-06-29 17:49:16 -05:00
Dave Collins
5032b07c66 Rename blockHashLen to blockHeaderLen.
The old name no longer makes sense because the hash length is the same as
the header length.
2014-06-29 17:45:46 -05:00
Dave Collins
843e71515a Expose new SerializeSize API for blocks.
This commit adds a new function named SerializeSize to the public API for
MsgBlock which can be used to determine how many bytes the serialized data would
take without having to actually serialize it.  In addition, it makes the
exported BlockVersion an untyped constant as well as changes the block and
tx versions to a signed integer to more closely match the protocol.

Finally, this commit also adds tests for the new function.

The following benchmark shows the difference between using the new
function to get the serialize size for a typical block and serializing
into a temporary buffer and taking the length of it:

Bufffer: BenchmarkBlockSerializeSizeBuffer     200000          27050 ns/op
New:     BenchmarkBlockSerializeSizeNew     100000000             34 ns/op

Closes #19.
2014-06-29 17:43:54 -05:00
Dave Collins
1db0eb4fec Update for recent btcjson changes.
This commit updates the types to match the recent changes to the btcjson
result types.
2014-06-29 16:37:21 -05:00
Dave Collins
e2e688e3d6 Make a compatibility pass.
This commit modifies some of the types of the values to better match the
reference client JSON-RPC API.
2014-06-29 16:35:53 -05:00
GeertJohan
f1bfb5dc1c Add ImportPrivKey versions with Label and Rescan arguments. 2014-06-28 23:34:38 -05:00
Dave Collins
0c9c005c33 Modify NewBlockTemplate to accept nil pay addr.
There are certain cases such as getblocktemplate which allow external
callers to be repsonsible for creating their own coinbase to replace the
generated one.  By allowing the pay address to be nil in such cases, the
need to specify mining addresses via --miningaddr can be avoided thereby
leaving the payment address management up to the caller.
2014-06-27 14:16:08 -05:00
Dave Collins
ed76ff2172 Add BIP0023 block proposal fields.
This commit adds the optional block proposal fields defined by BIP0023 to
the GetBlockTemplateResult and TemplateRequest types.

ok @jcvernaleo
2014-06-27 13:03:00 -05:00
Dave Collins
b5db9fb485 Add BIP0023 basic pool extension fields.
This commit adds the optional basic pool extension fields defined by
BIP0023 to the GetBlockTemplateResult GetBlockTemplateCmd types.

ok @jcvernaleo
2014-06-27 13:02:46 -05:00
Dave Collins
b6c474de2a Add support for BIP0022 GetBlockTemplateResult.
This commit adds a new result type for the getblocktemplate RPC which
provides the fields as defined by BIP0022.  The extension fields defined
by BIP0023 are not included yet.

ok @jcvernaleo
2014-06-27 13:02:28 -05:00
Dave Collins
5290cb1186 Allow more BIP0022 fields in GetBlockTemplateCmd.
BIP0022 defines optional fields in a getblocktemplate request for long
polling and template tweaking.

In addition, for template tweaking, there are two fields, sigoplimit and
sizelimit, which are atypical in that they are allowed to be either
booleans or numeric.  This requires the fields to be represented as
interfaces which means any code making use of the struct will need to use
type assertions or a type switch.

This commit updates GetBlockTemplateCmd accordingly.

ok @jcvernaleo
2014-06-27 13:02:11 -05:00
Dave Collins
d40cff64b0 Expose a close ntfn channel to all RPC handlers.
This commit modifies the RPC server such that all handlers now receive a
channel which will be notified when a client disconnects.  This
notification can then be used to stop long-running operations early when a
client disconnects.

This capability was already present for websocket clients, but this commit
exposes it to standard HTTP clients as well.
2014-06-27 11:58:47 -05:00
Dave Collins
dc84f95fe9 Name field WorkID to make golint happy. 2014-06-27 00:30:37 -05:00
Dave Collins
84af0d500f Update for SubmitBlockOptions field name change. 2014-06-27 00:27:32 -05:00
Dave Collins
ae51c3e6e0 Update test coverage report. 2014-06-27 00:01:33 -05:00
Dave Collins
a22da99f91 Convert script errors to RuleErrors.
This commit modifies the error return type for errors during script
validation to use the RuleError so they are consistent with the rest of
the errors.  This also helps the calling code differentiate blocks
rejected due to script parsing and validation errors as opposed to
internal issues such as inability to read from the disk.

To accomplish this, two new two new RuleErrors, ErrScriptMalformed and
ErrScriptValidation, have been added.

Also, the errors for script parsing issues and script validation errors
have been improved to include both transaction hashes and indexes involved
in the validation effort.  Previously script parsing issues had almost no
additional information as to which transaction input/outputs the failing
script came from.
2014-06-26 23:47:14 -05:00
Dave Collins
894d5e23aa Unmarshal the SubmitBlock error.
The string needs to be unmarshaled rather than returned directly otherwise
it will have an extra set of quotes plus it's safter to properly unmarshal
it.

Pointed out by @jrick.
2014-06-26 21:47:43 -05:00
Dave Collins
cf3ad14d4d Remove TODO that is complete. 2014-06-26 20:31:32 -05:00
Dave Collins
0f6726b9c3 Add missing import. 2014-06-26 20:24:40 -05:00