Commit graph

990 commits

Author SHA1 Message Date
Dave Collins
454d290b68 Convert waddrmgr to new walletdb package.
This commit converts the waddrmgr package to use the new walletdb package
semantics.

Since waddrmgr no longer controls the database, it is unable to make a
copy of the database and return it as the old ExportWatchingOnly function
required.  As a result, it has been renamed to ConvertToWatchingOnly and
it now modifies the namespace provided to it.  The idea is that the caller
which does control the database can now make a copy of the database, get
the waddrmgr namespace in the database copy and invoke the new function
to modify it.  This also works well with other packages that might also
need to make modifications for watching-only mode.

In addition, the following changes are made:

- All places that worked with database paths now work with the
  walletdb.Namespace interface
- The managerTx code is replaced to use the walletdb.Tx interface
- The code which checks if the manager already exists is updated to work
  with the walletdb.Namespace interface
- The LatestDbVersion constant is now LatestMgrVersion since it no longer
  controls the database
2014-11-11 15:07:16 -06:00
Dave Collins
cdba2f858c Finish comment in walletdb namespace example. 2014-11-10 22:30:07 -06:00
Dave Collins
c9ee57d53d Correct walletdb README.md example link. 2014-11-10 22:12:59 -06:00
Dave Collins
3cd0aa011d Cleanup recent encrypt/decrypt test additions.
This commit cleans up the recent test addition for testing the positive
and negative error paths of the Encrypt and Decrypt functions.

In particular:

- Add comments to all new functions
- Close the manager before trying to delete the file which is otherwise in
  use
- Rename the temp prefix since these are not pool tests
- Rename setUp to setupManager to make it a bit more explicit what it's
  doing
2014-11-10 21:39:57 -06:00
Lars Hesel Christensen
b4214fc93c Add tests for new encryption API on the manager
100% coverage on selectCryptoKey, Encrypt, Decrypt.
2014-11-10 21:11:23 -06:00
Dave Collins
349931dae9 Add README.md for walletdb and bdb driver. 2014-11-10 16:01:48 -06:00
Dave Collins
15fa0a523c Add examples for walletdb usage. 2014-11-10 16:01:47 -06:00
Dave Collins
d7c00f48d7 Add full test coverage suite for walletdb package. 2014-11-10 16:01:46 -06:00
Dave Collins
e8b4de9379 Implement new namespaced db package named walletdb.
This commit implements a new namespaced db package which  is intended to
be used be wallet and any sub-packages as its data storage mechanism.

- Key/value store
- Namespace support
- Allows multiple packages to have their own area in the database without
  worrying about conflicts
- Read-only and read-write transactions with both manual and managed modes
- Nested buckets
- Supports registration of backend databases
- Comprehensive test coverage
2014-11-10 16:01:45 -06:00
Javed Khan
9225863706 Updated VerifyMessage to not use the keystore 2014-11-07 10:28:25 +05:30
Dave Collins
e3769bcec6 Add the new ErrInvalidKeyType to the stringer map.
Also add it to the stringer test.
2014-10-31 10:20:58 -05:00
Dave Collins
732ffe4ed1 Address a couple of nits with recent En(De)crypt.
This commit adds comments about the specific crypto key types, moves the
selectCryptoKey function before the Encrypt/Decrypt functions that call it
to be more consistent with the rest of the code base, and slightly
modifies the verbiage of the comment.
2014-10-31 10:09:44 -05:00
Lars Hesel Christensen
7f7f6f33cb Expose functions needed from the voting pool package 2014-10-31 11:28:26 +01:00
Javed Khan
50da5a9f8c Update unspentOutputs to remove spent unconfirmed outputs 2014-10-29 11:06:21 -05:00
Dave Collins
fb7e87b1ef Move new addrmgr Options type and default to top.
Default values near the top of the file is preferrable so they are more
easily spotted.
2014-10-29 02:27:38 -05:00
Lars Hesel Christensen
402fcf0dd0 Make scrypt parameters overridable/optional 2014-10-28 23:46:28 -05:00
Guilherme Salgado
ec8a5bc10c Refactor txToPairs into smaller functions
Also adds tests for those functions, and improve fee estimation.
2014-10-28 15:12:15 -02:00
Dave Collins
ccb2b1e16d Update for recent btcjson API change.
This commit updates the Tx field of the ListReceivedByAddressResult to
TxIDS to mirror the recent change btcjson.
2014-10-26 13:29:13 -05:00
Javed Khan
2ea0ef66ea revert cafile error handling, continue with nil
This reverts commit 2a5e8587f6.
2014-10-15 23:15:35 +05:30
Josh Rickmar
fb1530a78f Remove plan9 rename function.
This function was misleading because it was actually *not* atomic
(meaning it should have never been used at all where atomicity was
required).  This will break builds on Plan 9 but I consider this fine
to do since the soon-to-be-integrated waddrmgr package relies on bolt
as a database and also does not compile for Plan 9.
2014-10-14 13:46:49 -05:00
Josh Rickmar
4c7243157f Make move and setaccount unsupported methods.
We no longer need to lie about supporting these in the future as they
will be impossible to implement correctly with the upcomming HD
wallet.
2014-10-14 13:11:11 -05:00
Javed Khan
2a5e8587f6 Handle chain server connection errors, if any 2014-10-14 22:28:47 +05:30
Dave Collins
966b6b0ec7 Unexport the cryptoKey type.
The crypto key type unsed in the manager is not needed outside of the
package.  Also, rather than having the newCryptoKey func return the
specific cryptoKey type, make it return the EncryptorDecryptor interface.
This will allow it to be overridden with another type that implements the
interface from the tests.
2014-10-13 16:19:12 -05:00
Guilherme Salgado
85f4856230 Allow injection of crypto keys into the manager.
Useful to test error conditions.

Also provide a new function that wraps snacl.GenerateCryptoKey(),
defined as a variable so that it can be replaced in tests.
2014-10-13 16:19:11 -05:00
Dave Collins
d0938d817f Provide new wallet address manager package.
This commit implements a new secure, scalable, hierarchical deterministic
wallet address manager package.

The following is an overview of features:

- BIP0032 hierarchical deterministic keys
- BIP0043/BIP0044 multi-account hierarchy
- Strong focus on security:
  - Fully encrypted database including public information such as
    addresses as well as private information such as private keys and
    scripts needed to redeem pay-to-script-hash transactions
  - Hardened against memory scraping through the use of actively clearing
    private material from memory when locked
  - Different crypto keys used for public, private, and script data
  - Ability for different passphrases for public and private data
  - Scrypt-based key derivation
  - NaCl-based secretbox cryptography (XSalsa20 and Poly1305)
  - Multi-tier scalable key design to allow instant password changes
    regardless of the number of addresses stored
- Import WIF keys
- Import pay-to-script-hash scripts for things such as multi-signature
  transactions
- Ability to export a watching-only version which does not contain any
  private key material
- Programmatically detectable errors, including encapsulation of errors
  from packages it relies on
- Address synchronization capabilities

This commit only provides the implementation package.  It does not
include integration into to the existing wallet code base or conversion of
existing addresses.  That functionality will be provided by future
commits.
2014-10-13 16:19:09 -05:00
Javed Khan
3f99ed233f implemented ListReceivedByAccount 2014-10-13 10:08:37 -05:00
Javed Khan
9ab659cda3 Added tx ids to ListReceivedByAddress result 2014-10-13 18:50:06 +05:30
Jimmy Song
8d928ce2e1 Update for recent btcec API changes.
This change is introduced so that btcwallet will continue to compile after
issue 6 in btcec is merged.
2014-10-12 21:23:12 -05:00
Jonathan Gillham
a9cf4a2bf5 Removed hashType byte cast. 2014-10-11 21:00:27 +01:00
Jonathan Gillham
e6bdb4465d Changed TxIn.PreviousOutpoint to TxIn.PreviousOutPoint. 2014-10-01 17:27:55 +01:00
Guilherme Salgado
4a2c4a38c9 Fix a couple comments 2014-09-23 07:36:49 -03:00
Josh Rickmar
2c52062894 Implement getreceivedbyaddress RPC.
Unlike Bitcoin Core wallet, this implementation does not ignore
coinbase transactions.
2014-09-11 10:09:02 -05:00
Dave Collins
7faa16c238 Configure TravisCI to pull pkgs needed for tests. 2014-08-30 00:14:00 -05:00
Josh Rickmar
5615e3530a Check websocket RPC auth for every method.
Previously, the createencryptedwallet and stop requests did not check
that the client had successfully authenticated to the server.  This
change moves the check outside of the select statement for these
special cased handlers (previously run from the default case) so an
auth check will occur even if a request method does not match either
of these two.
2014-08-19 08:03:06 -05:00
Josh Rickmar
757244a8da Fix logging for improper redeemingtx notifications. 2014-08-14 15:27:14 -05:00
Josh Rickmar
97c9d986d4 Log an unexpected error that was encountered.
The stack trace did not make it evidant which request had caused this
issue, so add extra logging for the request that caused it.  Sanitize
this request if it may contain any secrets.

Additionally, in this situation, begin shutting down the wallet rather
than simply dropping the response.  This will help to catch the issue
since it's easier to notice all requests failing, rather than just one
that was dropped.  If shutdown takes an unreasonably long time, panic.
2014-08-14 14:23:47 -05:00
Josh Rickmar
7b90b48bc6 Fix shutdown deadlock for ws notification queue.
While here, correct the comment on rpcServer.notificationQueue.

Closes #122.
2014-08-13 09:05:08 -05:00
Josh Rickmar
42a494f762 Serialize transaction creation.
Fixes #120.
2014-08-11 21:43:59 -05:00
Javed Khan
8759d12617 allow client to disconnect when handlers are done
added a waitgroup on websocketClient to keep track of handler
goroutines specific to the client
2014-08-08 18:33:38 +05:30
Josh Rickmar
8bc6eee32c Begin with root key index when reading keystores.
Instead of using the zero value, explicitly set the last chain index
to -1, which represents the root key.  If no additional keys are read
from the io.Reader, this could result in panics when looking up keys
at index 0, when no additional keys have been created yet.

Fixes #119.
2014-08-06 08:48:17 -05:00
David Hill
9b14cd99f1 Enable ScriptStrictMultiSig when creating or signing txs.
ok @jrick
2014-08-01 14:58:17 -04:00
Josh Rickmar
e7263e48dc Drain chain server connected notifications.
Fixes a possible hang on shutdown.
2014-08-01 11:05:26 -05:00
Guilherme Salgado
ef6aa91b6a Refactor Wallet.txToPairs into smaller functions
Also add a unit test for one of them.
2014-07-31 16:52:52 -03:00
Guilherme Salgado
868625d8c3 Remove a unused channel from chain.NewClient 2014-07-31 14:33:46 -05:00
Josh Rickmar
5e18693d2a Register for ntfns when the RPCS creates wallets.
Previously, registerations for wallet notifications (new txs, changed
account balances) were only passed up to websocket clients if the
wallet was loaded off disk (SetWallet was called with a non-nil
wallet), and not for the case when the RPC server would create the
wallet (if it wasn't created yet, and the user manually created it
with createencryptedwallet).  This change fixes that by registering
for these notifications when this code path is taken.
2014-07-31 08:27:30 -05:00
Josh Rickmar
dd856160aa Save logs to network specific directories.
Fixes #114.
2014-07-30 12:17:19 -05:00
Josh Rickmar
248ea9c08f Send btcdconnected notifications without a wallet.
The notified chain server connection state was being passed through
the wallet and then notified to the RPC server, which prevented this
notification from ever firing if a wallet didn't exist yet.  Instead,
make the RPC server register for these notifications directly from the
chain server RPC client.

I'm not happy with this notification and how it's handled in the code,
but to not break existing clients this change is being made.  Fixing
the notifiation mess and modifying existing clients to use a new
notification API will need to be done sometime later.
2014-07-30 09:47:50 -05:00
Josh Rickmar
400153d7c0 Drain notification registeration channel.
This prevents a hang when attempting to set the wallet (and register
for wallet notifications) when the process is interrupted and the rpc
server begins shutting down.
2014-07-29 08:36:28 -05:00
Josh Rickmar
2b5eefae56 Use btcd-specific RPC user/pass for chain RPC. 2014-07-28 09:52:16 -05:00
Josh Rickmar
549d0920f1 Fix build. 2014-07-28 09:51:49 -05:00