consolidate: remove obsoleted files
This commit is contained in:
parent
79da868c74
commit
1917978ae8
10 changed files with 0 additions and 1312 deletions
527
CHANGES
527
CHANGES
|
@ -1,527 +0,0 @@
|
||||||
============================================================================
|
|
||||||
User visible changes for lbcwallet
|
|
||||||
A wallet daemon for lbcd, written in Go
|
|
||||||
============================================================================
|
|
||||||
|
|
||||||
Changes in 0.7.0 (Mon Nov 23 2015)
|
|
||||||
- New features:
|
|
||||||
- Wallet will now detect network inactivity and reconnect to the lbcd
|
|
||||||
RPC server if the connection was lost (#320)
|
|
||||||
|
|
||||||
- Bug fixes:
|
|
||||||
- Removed data races in the RPC server (#292) and waddrmgr package
|
|
||||||
(#293)
|
|
||||||
- Corrected handling of lbcutil.AddressPubKey addresses when querying
|
|
||||||
for a ManagedAddress from the address manager (#313)
|
|
||||||
- Fixed signmessage and verifymessage algorithm to match the equivalent
|
|
||||||
algorithms used by Core (#324)
|
|
||||||
|
|
||||||
- Notable developer-related changes:
|
|
||||||
- Added support for AppVeyor continuous integration (#299)
|
|
||||||
- Take advantage of optimized zeroing from the Go 1.5 release (#286)
|
|
||||||
- Added IsError function to waddrmgr to check that an error is a
|
|
||||||
ManagerError and contains a matching error code (#289). Simplified
|
|
||||||
error handling in the wallet package and RPC server with this function
|
|
||||||
(#290).
|
|
||||||
- Switched to using a more space efficient data structure for the
|
|
||||||
wtxmgr CreditRecord type (#295)
|
|
||||||
- Incorporated latest updates to the votingpool package (#315)
|
|
||||||
|
|
||||||
- Miscellaneous:
|
|
||||||
- Updated websocket notification handlers to latest API required by
|
|
||||||
lbcd (#294)
|
|
||||||
- Enabled the logging subsystem of the rpcclient package (#328)
|
|
||||||
|
|
||||||
- Contributors (alphabetical order):
|
|
||||||
- Alex Yocom-Piatt
|
|
||||||
- cjepson
|
|
||||||
- Dave Collins
|
|
||||||
- John C. Vernaleo
|
|
||||||
- Josh Rickmar
|
|
||||||
- Rune T. Aune
|
|
||||||
|
|
||||||
Changes in 0.6.0 (Wed May 27 2015)
|
|
||||||
- New features:
|
|
||||||
- Add initial account support (#155):
|
|
||||||
- Add account names for each account number
|
|
||||||
- Create initial account with the "default" name
|
|
||||||
- Create new accounts using the createnewaccount RPC
|
|
||||||
- All accounts (with the exception of the imported account) may be
|
|
||||||
renamed using the renameaccount RPC
|
|
||||||
- RPC requests with an unspecified account that default to the unnamed
|
|
||||||
account in Bitcoin Core Wallet default to "default", the name of the
|
|
||||||
initial account
|
|
||||||
- Several RPCs with account parameters do not work with lbcwallet
|
|
||||||
accounts due to concerns over expectations of API compatibility with
|
|
||||||
Bitcoin Core Wallet. A new RPC API is being planned to rectify this
|
|
||||||
(#220).
|
|
||||||
- Store transactions, transaction history, and spend tracking in the
|
|
||||||
database (#217, #234)
|
|
||||||
- A full rescan is required when updating from previous wallet
|
|
||||||
versions to rebuild the transaction history
|
|
||||||
- Add utility (cmd/dropwtxmgr) to drop transaction history and force a
|
|
||||||
rescan (#234)
|
|
||||||
- Implement the help RPC to return single line usages of all wallet and
|
|
||||||
lbcd server requests as well as detailed usage for a single request
|
|
||||||
|
|
||||||
- Bug fixes:
|
|
||||||
- Handle chain reorgs by unconfirming transactions from removed blocks
|
|
||||||
(#248)
|
|
||||||
- Rollback all transaction history when none of the saved recently seen
|
|
||||||
block hashes are known to lbcd (#234, #281)
|
|
||||||
- Prevent the situation where the default account was renamed but cannot
|
|
||||||
be renamed back to "" or "default" by removing the special case naming
|
|
||||||
policy for the default account (#253)
|
|
||||||
- Create the initial account address if needed when calling the
|
|
||||||
getaccountaddress RPC (#238)
|
|
||||||
- Prevent listsinceblock RPC from including all listtransactions result
|
|
||||||
objects for all transactions since the genesis block (fix included in
|
|
||||||
#227)
|
|
||||||
- Add missing fields to listtransactions and gettransaction RPC results
|
|
||||||
(#265)
|
|
||||||
- Remove target confirmations limit on listsinceblock results (#266)
|
|
||||||
- Add JSON array to report errors creating input signature for
|
|
||||||
signrawtransaction RPC (#267)
|
|
||||||
- Use negative fees with listtransactions result types (#272)
|
|
||||||
- Prevent duplicate wallet lock attempt after timeout if explicitly
|
|
||||||
locked (#275)
|
|
||||||
- Use correct RPC server JSON-RPC error code for incorrect passphrases
|
|
||||||
with a walletpassphrase request (#284)
|
|
||||||
|
|
||||||
- Regressions:
|
|
||||||
- Inserting transactions and marking outputs as controlled by wallet in
|
|
||||||
the new transaction database is extremely slow compared to the previous
|
|
||||||
in-memory implementation. Later versions may improve this performance
|
|
||||||
regression by using write-ahead logging (WAL) and performing more
|
|
||||||
updates at a time under a single database transaction.
|
|
||||||
|
|
||||||
- Notable developer-related changes:
|
|
||||||
- Relicense all code to the lbcsuite developers (#258)
|
|
||||||
- Replace txstore package with wtxmgr, the walletdb-based transaction
|
|
||||||
store (#217, #234)
|
|
||||||
- Add Cursor API to walletdb for forwards and backwards iteration over
|
|
||||||
a bucket (included in #234)
|
|
||||||
- Factor out much of main's wallet.go into a wallet package (#213,
|
|
||||||
#276, #255)
|
|
||||||
- Convert RPC server and client to lbcjson v2 API (#233, #227)
|
|
||||||
- Help text and single line usages for the help RPC are pregenerated
|
|
||||||
from descriptions in the internal/rpchelp package and saved as
|
|
||||||
globals in main. Help text must be regenerated (using `go generate`)
|
|
||||||
each time the lbcjson struct tags change or the help definitions are
|
|
||||||
modified.
|
|
||||||
- Add additional features to the votingpool package:
|
|
||||||
- Implement StartWithdrawal API to begin an Open Transactions
|
|
||||||
withdrawal (#178)
|
|
||||||
- Add internal APIs to store withdrawal transactions in the wallet's
|
|
||||||
transaction database (#221)
|
|
||||||
- Addresses marked as used after appearing publicly on the blockchain or
|
|
||||||
in mempool; required for future single-use address support (#207)
|
|
||||||
- Modified waddrmgr APIs to use ForEach functions to iterate over
|
|
||||||
address strings and managed addresses to improve scability (#216)
|
|
||||||
- Move legacy directory under internal directory to prevent importing
|
|
||||||
of unmaintained packages (enforced since Go 1.5) (#285)
|
|
||||||
- Improve test coverage in the waddrmgr and wtxmgr packages (#239, #217)
|
|
||||||
|
|
||||||
- Contributors (alphabetical order):
|
|
||||||
- Dave Collins
|
|
||||||
- Guilherme Salgado
|
|
||||||
- Javed Khan
|
|
||||||
- Josh Rickmar
|
|
||||||
- Manan Patel
|
|
||||||
|
|
||||||
Changes in 0.5.1 (Fri Mar 06 2015)
|
|
||||||
- New features:
|
|
||||||
- Add flag (--createtemp) to create a temporary simnet wallet
|
|
||||||
|
|
||||||
- Bug fixes:
|
|
||||||
- Mark newly received transactions confirmed when the wallet is initially
|
|
||||||
created or opened with no addresses
|
|
||||||
|
|
||||||
- Notable developer-related changes:
|
|
||||||
- Refactor the address manager database upgrade paths for easier future
|
|
||||||
upgrades
|
|
||||||
- Private key zeroing functions consolidated into the internal zero package
|
|
||||||
and optimized
|
|
||||||
|
|
||||||
Changes in 0.5.0 (Tue Mar 03 2015)
|
|
||||||
- New features:
|
|
||||||
- Add a new address manager package (waddrmgr) to replace the previous
|
|
||||||
wallet/keystore package:
|
|
||||||
- BIP0032 hierarchical deterministic keys
|
|
||||||
- BIP0043/BIP0044 multi-account hierarchy
|
|
||||||
- Strong focus on security:
|
|
||||||
- Wallet master encryption keys protected by scrypt PBKDF
|
|
||||||
- NaCl-based secretbox cryptography (XSalsa20 and Poly1305)
|
|
||||||
- Mandatory encryption of private keys and P2SH redeeming scripts
|
|
||||||
- Optional encryption of public data, including extended public keys
|
|
||||||
and addresses
|
|
||||||
- Different crypto keys for redeeming scripts to mitigate cryptanalysis
|
|
||||||
- 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
|
|
||||||
- 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
|
|
||||||
- Add a new namespaced database package (walletdb):
|
|
||||||
- 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
|
|
||||||
- Replace the createencryptedwallet RPC with a wizard-style prompt
|
|
||||||
(--create) to create a new walletdb-backed wallet file and import keys
|
|
||||||
from the old Armory wallet file (if any)
|
|
||||||
- Transaction creation changes:
|
|
||||||
- Drop default transaction fee to 0.00001 BTC per kB
|
|
||||||
- Use standard script flags provided by the txscript package for
|
|
||||||
transaction creation and sanity checking
|
|
||||||
- Randomize change output index
|
|
||||||
- Includes amounts (total spendable, total needed, and fee) in all
|
|
||||||
insufficient funds errors
|
|
||||||
- Add support for simnet, the private simulation test network
|
|
||||||
- Implement the following Bitcoin Core RPCs:
|
|
||||||
- listreceivedbyaddress (#53)
|
|
||||||
- lockunspent, listlockunspent (#50, #55)
|
|
||||||
- getreceivedbyaddress
|
|
||||||
- listreceivedbyaccount
|
|
||||||
- Reimplement lbcd RPCs which return the best block to use the block most
|
|
||||||
recently processed by wallet to avoid confirmation races:
|
|
||||||
- getbestblockhash
|
|
||||||
- getblockcount
|
|
||||||
- Perform clean shutdown on interrupt or when a stop RPC is received (#69)
|
|
||||||
- Throttle the number of connected HTTP POST and websocket client
|
|
||||||
connections (tunable using the rpcmaxclients and rpcmaxwebsockets config
|
|
||||||
options)
|
|
||||||
- Provide the ability to disable TLS when connecting to a localhost lbcd or
|
|
||||||
serving localhost clients
|
|
||||||
|
|
||||||
- Rescan improvements:
|
|
||||||
- Add a rescan notification for when the rescan has completed and no more
|
|
||||||
rescan notifications are expected (#99)
|
|
||||||
- Use the most recent partial sync height from a rescan progress
|
|
||||||
notification when a rescan is restarted after the lbcd connection is lost
|
|
||||||
- Force a rescan if the transaction store cannot be opened (due to a
|
|
||||||
missing file or if the deserialization failed)
|
|
||||||
|
|
||||||
- RPC compatibility improvements:
|
|
||||||
- Allow the use of the `*` account name to refer to all accounts
|
|
||||||
- Make the account parameter optional for the getbalance and
|
|
||||||
listalltransactions requests
|
|
||||||
- Add iswatchonly field to the validateaddress response result
|
|
||||||
- Check address equivalence in verifymessage by comparing pubkeys and pubkey
|
|
||||||
hashes rather than requiring the address being verified to be one
|
|
||||||
controlled by the wallet and using its private key for verification
|
|
||||||
|
|
||||||
- Bug fixes:
|
|
||||||
- Prevent an out-of-bounds panic when handling a gettransaction RPC.
|
|
||||||
- Prevent a panic on client disconnect (#110).
|
|
||||||
- Prevent double spending coins when creating multiple transactions at once
|
|
||||||
by serializing access to the transaction creation logic (#120)
|
|
||||||
- Mark unconfirmed transaction credits as spent when another unconfirmed
|
|
||||||
transaction spends one (#91)
|
|
||||||
- Exclude immature coinbase outputs from listunspent results (#103)
|
|
||||||
- Fix several data and logic races during sync with lbcd (#101)
|
|
||||||
- Avoid a memory issue from incorrect slice usage which caused both
|
|
||||||
duplicate and missing blocks in the transaction store when middle
|
|
||||||
inserting transactions from a new block
|
|
||||||
- Only spend P2PKH outputs when creating sendfrom/sendmany/sendtoaddress
|
|
||||||
transactions (#89)
|
|
||||||
- Return the correct UTXO set when fetching all wallet UTXOs by fixing an
|
|
||||||
incorrect slice append
|
|
||||||
- Remove a deadlock caused by filling the lbcd notification channel (#100)
|
|
||||||
- Avoid a confirmation race by using the most recently processed block in
|
|
||||||
RPC handlers, rather than using the most recently notified block by lbcd
|
|
||||||
- Marshal empty JSON arrays as `[]` instead of the JSON `null` by using
|
|
||||||
empty, non-nil Go slices
|
|
||||||
- Flush logs and run all deferred functions before main returns and the
|
|
||||||
process exits
|
|
||||||
- Sync temporary transaction store flat file before closing and renaming
|
|
||||||
- Accept hex strings with an odd number of characters
|
|
||||||
|
|
||||||
- Notable developer-related changes:
|
|
||||||
- Switch from the go.net websocket package to gorilla websockets
|
|
||||||
- Refactor the RPC server:
|
|
||||||
- Move several global variables to the rpcServer struct
|
|
||||||
- Dynamically look up appropriate handlers for the current lbcd connection
|
|
||||||
status and wallet sync state
|
|
||||||
- Begin creating websocket notifications by sending to one of many
|
|
||||||
notification channels in the rpcServer struct, which are in turn
|
|
||||||
marshalled and broadcast to each websocket client
|
|
||||||
- Separate the RPC client code into the chain package:
|
|
||||||
- Uses rpcclient for a lbcd websocket RPC client
|
|
||||||
- Converts all notification callbacks to typed messages sent over channels
|
|
||||||
- Uses an unbounded queue for waiting notifications
|
|
||||||
- Import a new voting pool package (votingpool):
|
|
||||||
- Create and fetch voting pools and series from a walletdb namespace
|
|
||||||
- Generate deposit addresses utilizing m-of-n multisig P2SH scripts
|
|
||||||
- Improve transaction creation readability by splitting a monolithic
|
|
||||||
function into several smaller ones
|
|
||||||
- Check and handle all errors in some way, or explicitly comment why a
|
|
||||||
particular error was left unchecked
|
|
||||||
- Simplify RPC error handling by wrapping specific errors in unique types to
|
|
||||||
create an appropriate lbcjson error before the response is marshalled
|
|
||||||
- Add a map of unspent outputs (keyed by outpoint) to the transaction store
|
|
||||||
for quick lookup of any UTXO and access to the full wallet UTXO set
|
|
||||||
without iterating over many transactions looking for unspent credits
|
|
||||||
- Modify several data structures and function signatures have been modified
|
|
||||||
to reduce the number of needed allocations and be more cache friendly
|
|
||||||
|
|
||||||
- Miscellaneous:
|
|
||||||
- Rewrite paths relative to the data directory when an alternate data
|
|
||||||
directory is provided on the command line
|
|
||||||
- Switch the websocket endpoint to `ws` to match lbcd
|
|
||||||
- Remove the getaddressbalance extension RPC to discourage address reuse and
|
|
||||||
encourage watching for expected payments by using listunspent
|
|
||||||
- Increase transaction creation performance by moving the sorting of
|
|
||||||
transaction outputs by their amount out of an inner loop
|
|
||||||
- Add additional logging to the transaction store:
|
|
||||||
- Log each transaction added to the store
|
|
||||||
- Log each previously unconfirmed transaction that is mined
|
|
||||||
- [debug] Log which previous outputs are marked spent by a newly inserted
|
|
||||||
debiting transaction
|
|
||||||
- [debug] Log each transaction that is removed in a rollback
|
|
||||||
- Only log rollbacks if transactions are reorged out of the old chain
|
|
||||||
- Save logs to network-specific directories
|
|
||||||
(e.g. ~/.lbcwallet/logs/testnet3) to match lbcd behavior (#114)
|
|
||||||
|
|
||||||
Changes in 0.4.0 (Sun May 25 2014)
|
|
||||||
- Implement the following standard bitcoin server RPC requests:
|
|
||||||
- signmessage (https://github.com/lbryio/lbcwallet/issues/58)
|
|
||||||
- verifymessage (https://github.com/lbryio/lbcwallet/issues/61)
|
|
||||||
- listunspent (https://github.com/lbryio/lbcwallet/issues/54)
|
|
||||||
- validateaddress (https://github.com/lbryio/lbcwallet/issues/60)
|
|
||||||
- addressmultisig (https://github.com/lbryio/lbcwallet/issues/37)
|
|
||||||
- createmultisig (https://github.com/lbryio/lbcwallet/issues/37)
|
|
||||||
- signrawtransaction (https://github.com/lbryio/lbcwallet/issues/59)
|
|
||||||
|
|
||||||
- Add authenticate extension RPC request to authenticate a websocket
|
|
||||||
session without requiring the use of the HTTP Authorization header
|
|
||||||
|
|
||||||
- Add lbcdusername and lbcdpassword options to allow separate
|
|
||||||
authentication credentials from wallet clients when authenticating to a
|
|
||||||
lbcd websocket RPC server
|
|
||||||
|
|
||||||
- Fix RPC response passthrough: JSON unmarshaling and marshaling is now
|
|
||||||
delayed until necessary and JSON result objects from lbcd are sent to
|
|
||||||
clients directly without an extra decode+encode that may change the
|
|
||||||
representation of large integer values
|
|
||||||
|
|
||||||
- Fix several websocket client connection issues:
|
|
||||||
- Disconnect clients are cleanly removed without hanging on any final
|
|
||||||
sends
|
|
||||||
- Set deadline for websocket client sends to prevent hanging on
|
|
||||||
misbehaving clients or clients with a bad connection
|
|
||||||
|
|
||||||
- Fix return result for dumprivkey by always padding the private key bytes
|
|
||||||
to a length of 32
|
|
||||||
|
|
||||||
- Fix rescan for transaction history for imported addresses
|
|
||||||
(https://github.com/lbryio/lbcwallet/issues/74)
|
|
||||||
|
|
||||||
- Fix listsinceblock request handler to consider the minimum confirmation
|
|
||||||
parameter (https://github.com/lbryio/lbcwallet/issues/80)
|
|
||||||
|
|
||||||
- Fix several RPC handlers which require an unlocked wallet to check
|
|
||||||
for an unlocked wallet before continuing
|
|
||||||
(https://github.com/lbryio/lbcwallet/issues/65)
|
|
||||||
|
|
||||||
- Fix handling for block rewards (coinbase transactions):
|
|
||||||
- Update listtransactions results to use "generate" category for
|
|
||||||
coinbase outputs
|
|
||||||
- Prevent inclusion of immature coinbase outputs for newly created
|
|
||||||
transactions
|
|
||||||
|
|
||||||
- Rewrite the transaction store to handle several issues regarding
|
|
||||||
transation malleability and performance issues
|
|
||||||
- The new transaction store is written to disk in a different format
|
|
||||||
then before, and upgrades will require a rescan to rebuild the
|
|
||||||
transaction history
|
|
||||||
|
|
||||||
- Improve rescan:
|
|
||||||
- Begin rescan with known UTXO set at start height
|
|
||||||
- Serialize executation of all rescan requests
|
|
||||||
- Merge waiting rescan jobs so all jobs can be handled with a single
|
|
||||||
rescan
|
|
||||||
- Support parially synced addresses in the keystore and incrementally
|
|
||||||
mark rescan progress. If a rescan is unable to continue (wallet
|
|
||||||
closes, lbcd disconnects, etc.) a new rescan can start at the last
|
|
||||||
synced chain height
|
|
||||||
|
|
||||||
- Notify (with an unsolicited notification) websocket clients of lbcd
|
|
||||||
connection state
|
|
||||||
|
|
||||||
- Improve logging:
|
|
||||||
- Log reason for disconnecting a websocket client
|
|
||||||
|
|
||||||
- Updates for lbcd websocket API changes
|
|
||||||
|
|
||||||
- Stability fixes, internal API changes, general code cleanup, and comment
|
|
||||||
corrections
|
|
||||||
|
|
||||||
Changes in 0.3.0 (Mon Feb 10 2014)
|
|
||||||
- Use correct hash algorithm for chained addresses (fixes a bug where
|
|
||||||
address chaining was still deterministic, but forked from Armory and
|
|
||||||
previous lbcwallet implementations)
|
|
||||||
|
|
||||||
- Change websocket endpoint to connect to lbcd 0.6.0-alpha
|
|
||||||
|
|
||||||
- Redo server implementation to serialize handling of client requests
|
|
||||||
|
|
||||||
- Redo account locking to greatly reduce lbcwallet lockups caused by
|
|
||||||
incorrect mutex usage
|
|
||||||
|
|
||||||
- Open all accounts, rather than just the default account, at startup
|
|
||||||
|
|
||||||
- Generate new addresses using pubkey chaining if keypool is depleted and
|
|
||||||
wallet is locked
|
|
||||||
|
|
||||||
- Make maximum keypool size a configuration option (keypoolsize)
|
|
||||||
|
|
||||||
- Add disallowfree configuration option (default false) to force adding
|
|
||||||
the minimum fee to all outbound transactions
|
|
||||||
|
|
||||||
- Implement the following standard bitcoin server RPC requests:
|
|
||||||
- getinfo (https://github.com/lbryio/lbcwallet/issues/63)
|
|
||||||
- getrawchangeaddress (https://github.com/lbryio/lbcwallet/issues/41)
|
|
||||||
- getreceivedbyaccount (https://github.com/lbryio/lbcwallet/issues/42)
|
|
||||||
- gettransaction (https://github.com/lbryio/lbcwallet/issues/44)
|
|
||||||
- keypoolrefill (https://github.com/lbryio/lbcwallet/issues/48)
|
|
||||||
- listsinceblock (https://github.com/lbryio/lbcwallet/issues/52)
|
|
||||||
- sendtoaddress (https://github.com/lbryio/lbcwallet/issues/56)
|
|
||||||
|
|
||||||
- Add empty (unimplemented) handlers for the following RPC requests so
|
|
||||||
requests are not passed down to lbcd:
|
|
||||||
- getblocktemplate
|
|
||||||
- getwork
|
|
||||||
- stop
|
|
||||||
|
|
||||||
- Add RPC extension request, exportwatchingwallet, to export an account
|
|
||||||
with a watching-only wallet from an account with a hot wallet that
|
|
||||||
may be used by a separate lbcwallet instance
|
|
||||||
|
|
||||||
- Require all account wallets to share the same passphrase
|
|
||||||
|
|
||||||
- Change walletlock and walletpassphrase RPC requests to lock or unlock
|
|
||||||
all account wallets
|
|
||||||
|
|
||||||
- Allow opening accounts with watching-only wallets
|
|
||||||
|
|
||||||
- Return txid for sendfrom RPC requests
|
|
||||||
(https://github.com/lbryio/lbcwallet/issues/64)
|
|
||||||
|
|
||||||
- Rescan imported private keys in background
|
|
||||||
(https://github.com/lbryio/lbcwallet/issues/34)
|
|
||||||
|
|
||||||
- Do not import duplicate private keys
|
|
||||||
(https://github.com/lbryio/lbcwallet/issues/35)
|
|
||||||
|
|
||||||
- Write all three account files for a new account, rather than just
|
|
||||||
the wallet (https://github.com/lbryio/lbcwallet/issues/30)
|
|
||||||
|
|
||||||
- Create any missing directories before writing autogenerated certificate
|
|
||||||
pair
|
|
||||||
|
|
||||||
- Fix rescanning of a new account's root address
|
|
||||||
|
|
||||||
- Fix error in the wallet file serialization causing duplicate address
|
|
||||||
encryption attempts
|
|
||||||
|
|
||||||
- Fix issue calculating eligible transaction inputs caused by a bad
|
|
||||||
confirmation check
|
|
||||||
|
|
||||||
- Fix file locking issue on Windows caused by not closing files before
|
|
||||||
renaming
|
|
||||||
|
|
||||||
- Fix typos in README file
|
|
||||||
|
|
||||||
Changes in 0.2.1 (Thu Jan 10 2014)
|
|
||||||
- Fix a mutex issue which caused lbcwallet to lockup on all
|
|
||||||
RPC requests needing to read or write an account
|
|
||||||
|
|
||||||
Changes in 0.2.0 (Thu Jan 09 2014)
|
|
||||||
- Enable mainnet support (disabled by default, use --mainnet to enable)
|
|
||||||
|
|
||||||
- Don't hardcode localhost lbcd connections. Instead, add a --connect
|
|
||||||
option to specify the hostname or address and port of a local or
|
|
||||||
remote lbcd instance
|
|
||||||
(https://github.com/lbryio/lbcwallet/issues/1)
|
|
||||||
|
|
||||||
- Remove --serverport port and replace with --listen. This option works
|
|
||||||
just like lbcd's --rpclisten and allows to specify the interfaces to
|
|
||||||
listen for RPC connections
|
|
||||||
|
|
||||||
- Require TLS and Basic HTTP authentication before wallet can be
|
|
||||||
controlled over RPC
|
|
||||||
|
|
||||||
- Refill keypool if wallet is unlocked and keypool is emptied
|
|
||||||
|
|
||||||
- Detect and rollback saved tx/utxo info after lbcd performs blockchain
|
|
||||||
reorganizations while lbcwallet was disconnected
|
|
||||||
|
|
||||||
- Add support for the following standard bitcoin JSON-RPC calls:
|
|
||||||
- dumpprivkey (https://github.com/lbryio/lbcwallet/issues/9)
|
|
||||||
- getaccount
|
|
||||||
- getaccountaddress
|
|
||||||
- importprivkey (https://github.com/lbryio/lbcwallet/issues/2)
|
|
||||||
- listtransactions (https://github.com/lbryio/lbcwallet/issues/12)
|
|
||||||
|
|
||||||
- Add several extension RPC calls for websocket connections:
|
|
||||||
- getaddressbalance: get the balance associated with a single address
|
|
||||||
- getunconfirmedbalance: get total balance for unconfirmed transactions
|
|
||||||
- listaddresstransactions: list transactions for a single address
|
|
||||||
(https://github.com/lbryio/lbcwallet/issues/27)
|
|
||||||
- listalltransactions: lists all transactions without specifying a range
|
|
||||||
|
|
||||||
- Make RPC extensions available only to websocket connections, with the
|
|
||||||
exception of createencryptedwallet
|
|
||||||
|
|
||||||
- Add dummy handlers for unimplemented wallet RPC calls
|
|
||||||
(https://github.com/lbryio/lbcwallet/issues/29)
|
|
||||||
|
|
||||||
- Add socks5/tor proxy support
|
|
||||||
|
|
||||||
- Calculate and add minimum transaction fee to created transactions
|
|
||||||
|
|
||||||
- Use OS-specific rename calls to provide atomic file renames which
|
|
||||||
can replace a currently-existing file
|
|
||||||
(https://github.com/lbryio/lbcwallet/issues/20)
|
|
||||||
|
|
||||||
- Move account files to a single directory per bitcoin network to
|
|
||||||
prevent a future scaling issue
|
|
||||||
(https://github.com/lbryio/lbcwallet/issues/16)
|
|
||||||
|
|
||||||
- Fix several data races and mutex mishandling
|
|
||||||
|
|
||||||
- Fix a bug where the RPC server hung on requests requiring lbcd
|
|
||||||
when a lbcd connection was never established
|
|
||||||
|
|
||||||
- Fix a bug where creating account files did not create all necessary
|
|
||||||
directories (https://github.com/lbryio/lbcwallet/issues/15)
|
|
||||||
|
|
||||||
- Fix a bug where '~' did not expand to a home or user directory
|
|
||||||
(https://github.com/lbryio/lbcwallet/issues/17)
|
|
||||||
|
|
||||||
- Fix a bug where returning account names as strings did not remove
|
|
||||||
trailing ending 0s
|
|
||||||
|
|
||||||
- Fix a bug where help usage was displayed twice using the -h or --help
|
|
||||||
flag
|
|
||||||
|
|
||||||
- Fix sample listening address in sample configuration file
|
|
||||||
|
|
||||||
- Update sample configuration file with all available options with
|
|
||||||
descriptions and defaults for each
|
|
||||||
|
|
||||||
Initial Release 0.1.0 (Wed Nov 13 2013)
|
|
||||||
- Initial release
|
|
|
@ -1,117 +0,0 @@
|
||||||
// Copyright (c) 2015-2016 The btcsuite developers
|
|
||||||
// Use of this source code is governed by an ISC
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bufio"
|
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
"path/filepath"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/jessevdk/go-flags"
|
|
||||||
btcutil "github.com/lbryio/lbcutil"
|
|
||||||
"github.com/lbryio/lbcwallet/wallet"
|
|
||||||
"github.com/lbryio/lbcwallet/walletdb"
|
|
||||||
_ "github.com/lbryio/lbcwallet/walletdb/bdb"
|
|
||||||
)
|
|
||||||
|
|
||||||
const defaultNet = "mainnet"
|
|
||||||
|
|
||||||
var (
|
|
||||||
datadir = btcutil.AppDataDir("lbcwallet", false)
|
|
||||||
)
|
|
||||||
|
|
||||||
// Flags.
|
|
||||||
var opts = struct {
|
|
||||||
Force bool `short:"f" description:"Force removal without prompt"`
|
|
||||||
DbPath string `long:"db" description:"Path to wallet database"`
|
|
||||||
DropLabels bool `long:"droplabels" description:"Drop transaction labels"`
|
|
||||||
Timeout time.Duration `long:"timeout" description:"Timeout value when opening the wallet database"`
|
|
||||||
}{
|
|
||||||
Force: false,
|
|
||||||
DbPath: filepath.Join(datadir, defaultNet, wallet.WalletDBName),
|
|
||||||
Timeout: wallet.DefaultDBTimeout,
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
_, err := flags.Parse(&opts)
|
|
||||||
if err != nil {
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func yes(s string) bool {
|
|
||||||
switch s {
|
|
||||||
case "y", "Y", "yes", "Yes":
|
|
||||||
return true
|
|
||||||
default:
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func no(s string) bool {
|
|
||||||
switch s {
|
|
||||||
case "n", "N", "no", "No":
|
|
||||||
return true
|
|
||||||
default:
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
os.Exit(mainInt())
|
|
||||||
}
|
|
||||||
|
|
||||||
func mainInt() int {
|
|
||||||
fmt.Println("Database path:", opts.DbPath)
|
|
||||||
_, err := os.Stat(opts.DbPath)
|
|
||||||
if os.IsNotExist(err) {
|
|
||||||
fmt.Println("Database file does not exist")
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
for !opts.Force {
|
|
||||||
fmt.Print("Drop all lbcwallet transaction history? [y/N] ")
|
|
||||||
|
|
||||||
scanner := bufio.NewScanner(bufio.NewReader(os.Stdin))
|
|
||||||
if !scanner.Scan() {
|
|
||||||
// Exit on EOF.
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
err := scanner.Err()
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println()
|
|
||||||
fmt.Println(err)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
resp := scanner.Text()
|
|
||||||
if yes(resp) {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
if no(resp) || resp == "" {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Println("Enter yes or no.")
|
|
||||||
}
|
|
||||||
|
|
||||||
db, err := walletdb.Open("bdb", opts.DbPath, true, opts.Timeout)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println("Failed to open database:", err)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
defer db.Close()
|
|
||||||
|
|
||||||
fmt.Println("Dropping lbcwallet transaction history")
|
|
||||||
|
|
||||||
err = wallet.DropTransactionHistory(db, !opts.DropLabels)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println("Failed to drop and re-create namespace:", err)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
|
@ -1,368 +0,0 @@
|
||||||
// Copyright (c) 2015-2016 The btcsuite developers
|
|
||||||
// Use of this source code is governed by an ISC
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"io/ioutil"
|
|
||||||
"os"
|
|
||||||
"path/filepath"
|
|
||||||
|
|
||||||
"golang.org/x/crypto/ssh/terminal"
|
|
||||||
|
|
||||||
"github.com/jessevdk/go-flags"
|
|
||||||
"github.com/lbryio/lbcd/btcjson"
|
|
||||||
"github.com/lbryio/lbcd/chaincfg/chainhash"
|
|
||||||
"github.com/lbryio/lbcd/rpcclient"
|
|
||||||
"github.com/lbryio/lbcd/txscript"
|
|
||||||
"github.com/lbryio/lbcd/wire"
|
|
||||||
btcutil "github.com/lbryio/lbcutil"
|
|
||||||
"github.com/lbryio/lbcwallet/internal/cfgutil"
|
|
||||||
"github.com/lbryio/lbcwallet/netparams"
|
|
||||||
"github.com/lbryio/lbcwallet/wallet/txauthor"
|
|
||||||
"github.com/lbryio/lbcwallet/wallet/txrules"
|
|
||||||
"github.com/lbryio/lbcwallet/wallet/txsizes"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
walletDataDirectory = btcutil.AppDataDir("lbcwallet", false)
|
|
||||||
newlineBytes = []byte{'\n'}
|
|
||||||
)
|
|
||||||
|
|
||||||
func fatalf(format string, args ...interface{}) {
|
|
||||||
fmt.Fprintf(os.Stderr, format, args...)
|
|
||||||
os.Stderr.Write(newlineBytes)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
func errContext(err error, context string) error {
|
|
||||||
return fmt.Errorf("%s: %v", context, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Flags.
|
|
||||||
var opts = struct {
|
|
||||||
TestNet3 bool `long:"testnet" description:"Use the test bitcoin network (version 3)"`
|
|
||||||
SimNet bool `long:"simnet" description:"Use the simulation bitcoin network"`
|
|
||||||
RegTest bool `long:"regtest" description:"Use the regression test network"`
|
|
||||||
RPCConnect string `short:"c" long:"connect" description:"Hostname[:port] of wallet RPC server"`
|
|
||||||
RPCUsername string `short:"u" long:"rpcuser" description:"Wallet RPC username"`
|
|
||||||
RPCCertificateFile string `long:"cafile" description:"Wallet RPC TLS certificate"`
|
|
||||||
FeeRate *cfgutil.AmountFlag `long:"feerate" description:"Transaction fee per kilobyte"`
|
|
||||||
SourceAccount string `long:"sourceacct" description:"Account to sweep outputs from"`
|
|
||||||
DestinationAccount string `long:"destacct" description:"Account to send sweeped outputs to"`
|
|
||||||
RequiredConfirmations int64 `long:"minconf" description:"Required confirmations to include an output"`
|
|
||||||
}{
|
|
||||||
TestNet3: false,
|
|
||||||
SimNet: false,
|
|
||||||
RegTest: false,
|
|
||||||
RPCConnect: "localhost",
|
|
||||||
RPCUsername: "",
|
|
||||||
RPCCertificateFile: filepath.Join(walletDataDirectory, "rpc.cert"),
|
|
||||||
FeeRate: cfgutil.NewAmountFlag(txrules.DefaultRelayFeePerKb),
|
|
||||||
SourceAccount: "imported",
|
|
||||||
DestinationAccount: "default",
|
|
||||||
RequiredConfirmations: 1,
|
|
||||||
}
|
|
||||||
|
|
||||||
// Parse and validate flags.
|
|
||||||
func init() {
|
|
||||||
// Unset localhost defaults if certificate file can not be found.
|
|
||||||
certFileExists, err := cfgutil.FileExists(opts.RPCCertificateFile)
|
|
||||||
if err != nil {
|
|
||||||
fatalf("%v", err)
|
|
||||||
}
|
|
||||||
if !certFileExists {
|
|
||||||
opts.RPCConnect = ""
|
|
||||||
opts.RPCCertificateFile = ""
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err = flags.Parse(&opts)
|
|
||||||
if err != nil {
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
if opts.TestNet3 && opts.SimNet {
|
|
||||||
fatalf("Multiple bitcoin networks may not be used simultaneously")
|
|
||||||
}
|
|
||||||
var activeNet = &netparams.MainNetParams
|
|
||||||
if opts.TestNet3 {
|
|
||||||
activeNet = &netparams.TestNet3Params
|
|
||||||
} else if opts.SimNet {
|
|
||||||
activeNet = &netparams.SimNetParams
|
|
||||||
} else if opts.RegTest {
|
|
||||||
activeNet = &netparams.RegTestParams
|
|
||||||
}
|
|
||||||
|
|
||||||
if opts.RPCConnect == "" {
|
|
||||||
fatalf("RPC hostname[:port] is required")
|
|
||||||
}
|
|
||||||
rpcConnect, err := cfgutil.NormalizeAddress(opts.RPCConnect, activeNet.RPCServerPort)
|
|
||||||
if err != nil {
|
|
||||||
fatalf("Invalid RPC network address `%v`: %v", opts.RPCConnect, err)
|
|
||||||
}
|
|
||||||
opts.RPCConnect = rpcConnect
|
|
||||||
|
|
||||||
if opts.RPCUsername == "" {
|
|
||||||
fatalf("RPC username is required")
|
|
||||||
}
|
|
||||||
|
|
||||||
certFileExists, err = cfgutil.FileExists(opts.RPCCertificateFile)
|
|
||||||
if err != nil {
|
|
||||||
fatalf("%v", err)
|
|
||||||
}
|
|
||||||
if !certFileExists {
|
|
||||||
fatalf("RPC certificate file `%s` not found", opts.RPCCertificateFile)
|
|
||||||
}
|
|
||||||
|
|
||||||
if opts.FeeRate.Amount > 1e6 {
|
|
||||||
fatalf("Fee rate `%v/kB` is exceptionally high", opts.FeeRate.Amount)
|
|
||||||
}
|
|
||||||
if opts.FeeRate.Amount < 1e2 {
|
|
||||||
fatalf("Fee rate `%v/kB` is exceptionally low", opts.FeeRate.Amount)
|
|
||||||
}
|
|
||||||
if opts.SourceAccount == opts.DestinationAccount {
|
|
||||||
fatalf("Source and destination accounts should not be equal")
|
|
||||||
}
|
|
||||||
if opts.RequiredConfirmations < 0 {
|
|
||||||
fatalf("Required confirmations must be non-negative")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// noInputValue describes an error returned by the input source when no inputs
|
|
||||||
// were selected because each previous output value was zero. Callers of
|
|
||||||
// txauthor.NewUnsignedTransaction need not report these errors to the user.
|
|
||||||
type noInputValue struct {
|
|
||||||
}
|
|
||||||
|
|
||||||
func (noInputValue) Error() string { return "no input value" }
|
|
||||||
|
|
||||||
// makeInputSource creates an InputSource that creates inputs for every unspent
|
|
||||||
// output with non-zero output values. The target amount is ignored since every
|
|
||||||
// output is consumed. The InputSource does not return any previous output
|
|
||||||
// scripts as they are not needed for creating the unsinged transaction and are
|
|
||||||
// looked up again by the wallet during the call to signrawtransaction.
|
|
||||||
func makeInputSource(outputs []btcjson.ListUnspentResult) txauthor.InputSource {
|
|
||||||
var (
|
|
||||||
totalInputValue btcutil.Amount
|
|
||||||
inputs = make([]*wire.TxIn, 0, len(outputs))
|
|
||||||
inputValues = make([]btcutil.Amount, 0, len(outputs))
|
|
||||||
sourceErr error
|
|
||||||
)
|
|
||||||
for _, output := range outputs {
|
|
||||||
output := output
|
|
||||||
|
|
||||||
outputAmount, err := btcutil.NewAmount(output.Amount)
|
|
||||||
if err != nil {
|
|
||||||
sourceErr = fmt.Errorf(
|
|
||||||
"invalid amount `%v` in listunspent result",
|
|
||||||
output.Amount)
|
|
||||||
break
|
|
||||||
}
|
|
||||||
if outputAmount == 0 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if !saneOutputValue(outputAmount) {
|
|
||||||
sourceErr = fmt.Errorf(
|
|
||||||
"impossible output amount `%v` in listunspent result",
|
|
||||||
outputAmount)
|
|
||||||
break
|
|
||||||
}
|
|
||||||
totalInputValue += outputAmount
|
|
||||||
|
|
||||||
previousOutPoint, err := parseOutPoint(&output)
|
|
||||||
if err != nil {
|
|
||||||
sourceErr = fmt.Errorf(
|
|
||||||
"invalid data in listunspent result: %v",
|
|
||||||
err)
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
inputs = append(inputs, wire.NewTxIn(&previousOutPoint, nil, nil))
|
|
||||||
inputValues = append(inputValues, outputAmount)
|
|
||||||
}
|
|
||||||
|
|
||||||
if sourceErr == nil && totalInputValue == 0 {
|
|
||||||
sourceErr = noInputValue{}
|
|
||||||
}
|
|
||||||
|
|
||||||
return func(btcutil.Amount) (btcutil.Amount, []*wire.TxIn, []btcutil.Amount, [][]byte, error) {
|
|
||||||
return totalInputValue, inputs, inputValues, nil, sourceErr
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// makeDestinationScriptSource creates a ChangeSource which is used to receive
|
|
||||||
// all correlated previous input value. A non-change address is created by this
|
|
||||||
// function.
|
|
||||||
func makeDestinationScriptSource(rpcClient *rpcclient.Client, accountName string) *txauthor.ChangeSource {
|
|
||||||
|
|
||||||
// GetNewAddress always returns a P2PKH address since it assumes
|
|
||||||
// BIP-0044.
|
|
||||||
newChangeScript := func() ([]byte, error) {
|
|
||||||
destinationAddress, err := rpcClient.GetNewAddress(accountName)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return txscript.PayToAddrScript(destinationAddress)
|
|
||||||
}
|
|
||||||
|
|
||||||
return &txauthor.ChangeSource{
|
|
||||||
ScriptSize: txsizes.P2PKHPkScriptSize,
|
|
||||||
NewScript: newChangeScript,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
err := sweep()
|
|
||||||
if err != nil {
|
|
||||||
fatalf("%v", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func sweep() error {
|
|
||||||
rpcPassword, err := promptSecret("Wallet RPC password")
|
|
||||||
if err != nil {
|
|
||||||
return errContext(err, "failed to read RPC password")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Open RPC client.
|
|
||||||
rpcCertificate, err := ioutil.ReadFile(opts.RPCCertificateFile)
|
|
||||||
if err != nil {
|
|
||||||
return errContext(err, "failed to read RPC certificate")
|
|
||||||
}
|
|
||||||
rpcClient, err := rpcclient.New(&rpcclient.ConnConfig{
|
|
||||||
Host: opts.RPCConnect,
|
|
||||||
User: opts.RPCUsername,
|
|
||||||
Pass: rpcPassword,
|
|
||||||
Certificates: rpcCertificate,
|
|
||||||
HTTPPostMode: true,
|
|
||||||
}, nil)
|
|
||||||
if err != nil {
|
|
||||||
return errContext(err, "failed to create RPC client")
|
|
||||||
}
|
|
||||||
defer rpcClient.Shutdown()
|
|
||||||
|
|
||||||
// Fetch all unspent outputs, ignore those not from the source
|
|
||||||
// account, and group by their destination address. Each grouping of
|
|
||||||
// outputs will be used as inputs for a single transaction sending to a
|
|
||||||
// new destination account address.
|
|
||||||
unspentOutputs, err := rpcClient.ListUnspent()
|
|
||||||
if err != nil {
|
|
||||||
return errContext(err, "failed to fetch unspent outputs")
|
|
||||||
}
|
|
||||||
sourceOutputs := make(map[string][]btcjson.ListUnspentResult)
|
|
||||||
for _, unspentOutput := range unspentOutputs {
|
|
||||||
if !unspentOutput.Spendable {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if unspentOutput.Confirmations < opts.RequiredConfirmations {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if unspentOutput.Account != opts.SourceAccount {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
sourceAddressOutputs := sourceOutputs[unspentOutput.Address]
|
|
||||||
sourceOutputs[unspentOutput.Address] = append(sourceAddressOutputs, unspentOutput)
|
|
||||||
}
|
|
||||||
|
|
||||||
var passphrase string
|
|
||||||
if len(sourceOutputs) != 0 {
|
|
||||||
passphrase, err = promptSecret("Wallet passphrase")
|
|
||||||
if err != nil {
|
|
||||||
return errContext(err, "failed to read passphrase")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var totalSwept btcutil.Amount
|
|
||||||
var numErrors int
|
|
||||||
var reportError = func(format string, args ...interface{}) {
|
|
||||||
fmt.Fprintf(os.Stderr, format, args...)
|
|
||||||
os.Stderr.Write(newlineBytes)
|
|
||||||
numErrors++
|
|
||||||
}
|
|
||||||
for _, previousOutputs := range sourceOutputs {
|
|
||||||
inputSource := makeInputSource(previousOutputs)
|
|
||||||
destinationSource := makeDestinationScriptSource(rpcClient, opts.DestinationAccount)
|
|
||||||
tx, err := txauthor.NewUnsignedTransaction(nil, opts.FeeRate.Amount,
|
|
||||||
inputSource, destinationSource)
|
|
||||||
if err != nil {
|
|
||||||
if err != (noInputValue{}) {
|
|
||||||
reportError("Failed to create unsigned transaction: %v", err)
|
|
||||||
}
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
// Unlock the wallet, sign the transaction, and immediately lock.
|
|
||||||
err = rpcClient.WalletPassphrase(passphrase, 60)
|
|
||||||
if err != nil {
|
|
||||||
reportError("Failed to unlock wallet: %v", err)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
signedTransaction, complete, err := rpcClient.SignRawTransaction(tx.Tx)
|
|
||||||
_ = rpcClient.WalletLock()
|
|
||||||
if err != nil {
|
|
||||||
reportError("Failed to sign transaction: %v", err)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if !complete {
|
|
||||||
reportError("Failed to sign every input")
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
// Publish the signed sweep transaction.
|
|
||||||
txHash, err := rpcClient.SendRawTransaction(signedTransaction, false)
|
|
||||||
if err != nil {
|
|
||||||
reportError("Failed to publish transaction: %v", err)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
outputAmount := btcutil.Amount(tx.Tx.TxOut[0].Value)
|
|
||||||
fmt.Printf("Swept %v to destination account with transaction %v\n",
|
|
||||||
outputAmount, txHash)
|
|
||||||
totalSwept += outputAmount
|
|
||||||
}
|
|
||||||
|
|
||||||
numPublished := len(sourceOutputs) - numErrors
|
|
||||||
transactionNoun := pickNoun(numErrors, "transaction", "transactions")
|
|
||||||
if numPublished != 0 {
|
|
||||||
fmt.Printf("Swept %v to destination account across %d %s\n",
|
|
||||||
totalSwept, numPublished, transactionNoun)
|
|
||||||
}
|
|
||||||
if numErrors > 0 {
|
|
||||||
return fmt.Errorf("failed to publish %d %s", numErrors,
|
|
||||||
transactionNoun)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func promptSecret(what string) (string, error) {
|
|
||||||
fmt.Printf("%s: ", what)
|
|
||||||
fd := int(os.Stdin.Fd())
|
|
||||||
input, err := terminal.ReadPassword(fd)
|
|
||||||
fmt.Println()
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
return string(input), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func saneOutputValue(amount btcutil.Amount) bool {
|
|
||||||
return amount >= 0 && amount <= btcutil.MaxSatoshi
|
|
||||||
}
|
|
||||||
|
|
||||||
func parseOutPoint(input *btcjson.ListUnspentResult) (wire.OutPoint, error) {
|
|
||||||
txHash, err := chainhash.NewHashFromStr(input.TxID)
|
|
||||||
if err != nil {
|
|
||||||
return wire.OutPoint{}, err
|
|
||||||
}
|
|
||||||
return wire.OutPoint{Hash: *txHash, Index: input.Vout}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func pickNoun(n int, singularForm, pluralForm string) string {
|
|
||||||
if n == 1 {
|
|
||||||
return singularForm
|
|
||||||
}
|
|
||||||
return pluralForm
|
|
||||||
}
|
|
28
deps.txt
28
deps.txt
|
@ -1,28 +0,0 @@
|
||||||
Dependency Commits
|
|
||||||
==================
|
|
||||||
|
|
||||||
lbcwallet 0.7.0 Alpha
|
|
||||||
----------------
|
|
||||||
bolt 1139dd23c5f9d1a28096b511959044b29364a3fe
|
|
||||||
cea5d3c1cc16eb07a1686c557db23004655ae11b
|
|
||||||
btclog 5005b7240f310ae8f01c7664a3954d280241eb2b
|
|
||||||
btcrpcclient b81555beeac8eda71e8150cc9d63631aaa756965
|
|
||||||
btcutil ff82dacded1c76d101bce55c394c03c0bbff69e8
|
|
||||||
fastsha256 302ad4db268b46f9ebda3078f6f7397f96047735
|
|
||||||
go-flags 6c288d648c1cc1befcb90cb5511dcacf64ae8e61
|
|
||||||
go-socks cfe8b59e565c1a5bd4e2005d77cd9aa8b2e14524
|
|
||||||
golangcrypto 53f62d9b43e87a6c56975cf862af7edf33a8d0df
|
|
||||||
seelog 313961b101eb55f65ae0f03ddd4e322731763b6c
|
|
||||||
websocket 31079b6807923eb23992c421b114992b95131b55
|
|
||||||
|
|
||||||
lbcwallet 0.1.0 Alpha
|
|
||||||
----------------
|
|
||||||
3108b944017b14a3c5863ed1401f1a2471907d84
|
|
||||||
btcec a97fd5fe2c670030f8d77dc13b9fa8401ef9f349
|
|
||||||
btcjson d20f958c92e1444d83215c3cf98d6eef41898dcb
|
|
||||||
btcscript f4a6449ad3b90d0c830bf2895b83ced8d5fb91e9
|
|
||||||
btcutil aa811871654079f5036d3692dcf6c66928d19447
|
|
||||||
btcwire dd41f7e91a682b7c1ceed633e12ece6ba7b6bc72
|
|
||||||
btcws 497f1770445677372557d70621782d921a5318e3
|
|
||||||
go-flags fa177a84d3b73bf7e4b79125b2a963bc134eff77
|
|
||||||
seelog 6b91ad56123bb473755caa213db2bde5422177bf
|
|
|
@ -1,3 +0,0 @@
|
||||||
### Guides
|
|
||||||
|
|
||||||
[Rebuilding all transaction history with forced rescans](https://github.com/lbryio/lbcwallet/tree/master/docs/force_rescans.md)
|
|
|
@ -1,80 +0,0 @@
|
||||||
# Rebuilding transaction history
|
|
||||||
|
|
||||||
It is unlikely, but possible and unfortunate, that transaction history in the
|
|
||||||
wallet database may not represent reality. This may be due to a programming
|
|
||||||
mistake or the transaction database becoming corrupted. Thankfully, all
|
|
||||||
transactions are publicly recorded on the blockchain, and transactions
|
|
||||||
necessary for a fully functional wallet can be recovered. This process is
|
|
||||||
called rescanning, and the following guide will demonstrate how to force such a
|
|
||||||
rescan.
|
|
||||||
|
|
||||||
Rescans are automatically performed each time the wallet syncs to the network.
|
|
||||||
These are used to "catch up" the wallet to the newest best block in the block
|
|
||||||
chain. For example, the following log messages at startup indicate that an
|
|
||||||
out-of-sync wallet started a rescan for all addresses and unspent outputs since
|
|
||||||
some block.
|
|
||||||
|
|
||||||
```
|
|
||||||
13:45:03 2015-04-13 [INF] WLLT: Started rescan from block 00000000001703b1a9dfd4865d587cd3f3cbb2f8e6ce9b44668e78ad8d4a7377 (height 205921) for 1 address
|
|
||||||
...
|
|
||||||
13:45:49 2015-04-13 [INF] WLLT: Finished rescan for 1 address (synced to block 0000000005cecab1013ecb1275a3e0c9623c4a497a57b6b6bf0fc1525aca1fbf, height 335146)
|
|
||||||
```
|
|
||||||
|
|
||||||
During the rescan, relevant transactions from previously unseen blocks are added
|
|
||||||
to the wallet database and spend tracking is updated accordingly. After the
|
|
||||||
rescan at startup finishes, a wallet is marked in sync with the chain.
|
|
||||||
|
|
||||||
When wallet is started without any transaction history, a rescan is performed
|
|
||||||
for all blocks since the creation date of the wallet's first address. There are
|
|
||||||
two situations when this holds true:
|
|
||||||
|
|
||||||
1. The wallet is newly created or was recreated from the seed
|
|
||||||
2. The transaction history is explicitly deleted
|
|
||||||
|
|
||||||
The second case is how a forced rescan is performed.
|
|
||||||
|
|
||||||
lbcwallet will not drop transaction history by itself, as this is something that
|
|
||||||
should not be necessary under normal wallet operation. However, a tool,
|
|
||||||
`dropwtxmgr`, is provided in the `cmd/dropwtxmgr` directory which may be used to
|
|
||||||
drop the wallet transaction manager (wtxmgr) history from a wallet database.
|
|
||||||
The tool may already be installed in your PATH, but if not, installing it is easy:
|
|
||||||
|
|
||||||
```
|
|
||||||
$ cd $GOPATH/src/github.com/lbryio/lbcwallet/cmd/dropwtxmgr
|
|
||||||
$ go get
|
|
||||||
```
|
|
||||||
|
|
||||||
Dropping transaction history given the default database location can be
|
|
||||||
performed by stopping wallet (to release the database) and running the tool,
|
|
||||||
answering yes to the prompt:
|
|
||||||
|
|
||||||
```
|
|
||||||
$ dropwtxmgr
|
|
||||||
Database path: /home/username/.lbcwallet/mainnet/wallet.db
|
|
||||||
Drop all lbcwallet transaction history? [y/N] y
|
|
||||||
Dropping wtxmgr namespace
|
|
||||||
```
|
|
||||||
|
|
||||||
If the wallet database is in another location or transaction history for a
|
|
||||||
different network (e.g. testnet or simnet) must be dropped, the full database
|
|
||||||
path may be specified:
|
|
||||||
|
|
||||||
```
|
|
||||||
$ dropwtxmgr --db ~/.lbcwallet/testnet/wallet.db
|
|
||||||
Database path: /home/username/.lbcwallet/testnet/wallet.db
|
|
||||||
Drop all lbcwallet transaction history? [y/N] y
|
|
||||||
Dropping wtxmgr namespace
|
|
||||||
```
|
|
||||||
|
|
||||||
After dropping transaction history, lbcwallet may be restarted and a full rescan
|
|
||||||
will be triggered to sync the wallet:
|
|
||||||
|
|
||||||
```
|
|
||||||
$ lbcwallet
|
|
||||||
14:05:31 2015-04-13 [INF] BTCW: No recorded transaction history -- needs full rescan
|
|
||||||
...
|
|
||||||
14:05:31 2015-04-13 [INF] WLLT: Started rescan from block 000000000000e37b0f99af2e434834123b5459e31e17937169ce81ed0cc4d61c (height 193191) for 1 address
|
|
||||||
...
|
|
||||||
14:07:06 2015-04-13 [INF] WLLT: Finished rescan for 1 address (synced to block 00000000049041b5bd7f8ac86c8f1d32065053aefbe8c31e25ed03ef015a725a, height 335482)
|
|
||||||
|
|
||||||
```
|
|
|
@ -1,17 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# This script uses gocov to generate a test coverage report.
|
|
||||||
# The gocov tool my be obtained with the following command:
|
|
||||||
# go get github.com/axw/gocov/gocov
|
|
||||||
#
|
|
||||||
# It will be installed to $GOPATH/bin, so ensure that location is in your $PATH.
|
|
||||||
|
|
||||||
# Check for gocov.
|
|
||||||
type gocov >/dev/null 2>&1
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo >&2 "This script requires the gocov tool."
|
|
||||||
echo >&2 "You may obtain it with the following command:"
|
|
||||||
echo >&2 "go get github.com/axw/gocov/gocov"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
gocov test | gocov report
|
|
|
@ -1,126 +0,0 @@
|
||||||
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go serializeBIP0044AccountRow 100.00% (19/19)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go Manager.lock 100.00% (12/12)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go serializeScriptAddress 100.00% (10/10)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go serializeImportedAddress 100.00% (10/10)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go serializeAddressRow 100.00% (9/9)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go Manager.Address 100.00% (8/8)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go Manager.Lock 100.00% (8/8)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/address.go scriptAddress.Script 100.00% (7/7)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go serializeAccountRow 100.00% (6/6)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/sync.go BlockIterator.Prev 100.00% (6/6)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/address.go zeroBigInt 100.00% (5/5)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go Manager.zeroSensitivePublicData 100.00% (5/5)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/address.go managedAddress.lock 100.00% (4/4)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/address.go scriptAddress.lock 100.00% (4/4)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go serializeChainedAddress 100.00% (4/4)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/address.go managedAddress.ExportPrivKey 100.00% (4/4)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go fileExists 100.00% (4/4)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/error.go ManagerError.Error 100.00% (3/3)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/error.go ErrorCode.String 100.00% (3/3)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/address.go managedAddress.pubKeyBytes 100.00% (3/3)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/sync.go Manager.NewIterateRecentBlocks 100.00% (3/3)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/sync.go BlockIterator.BlockStamp 100.00% (3/3)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go accountKey 100.00% (3/3)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/sync.go Manager.SyncedTo 100.00% (3/3)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go managerTx.PutAccountInfo 100.00% (3/3)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go Manager.IsLocked 100.00% (3/3)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go managerTx.PutImportedAddress 100.00% (3/3)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go managerTx.ExistsAddress 100.00% (3/3)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/address.go zero 100.00% (2/2)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/address.go scriptAddress.Account 100.00% (1/1)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/address.go scriptAddress.Compressed 100.00% (1/1)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/sync.go newSyncState 100.00% (1/1)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/address.go scriptAddress.Internal 100.00% (1/1)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go cryptoKey.CopyBytes 100.00% (1/1)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go newManager 100.00% (1/1)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/address.go managedAddress.AddrHash 100.00% (1/1)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go defaultNewSecretKey 100.00% (1/1)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/address.go scriptAddress.Imported 100.00% (1/1)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/address.go scriptAddress.AddrHash 100.00% (1/1)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/address.go scriptAddress.Address 100.00% (1/1)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/address.go managedAddress.Account 100.00% (1/1)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/address.go managedAddress.Internal 100.00% (1/1)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go Manager.Net 100.00% (1/1)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/address.go managedAddress.ExportPubKey 100.00% (1/1)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/error.go managerError 100.00% (1/1)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/address.go managedAddress.PubKey 100.00% (1/1)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go cryptoKey.Bytes 100.00% (1/1)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/address.go managedAddress.Compressed 100.00% (1/1)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/address.go managedAddress.Address 100.00% (1/1)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/address.go managedAddress.Imported 100.00% (1/1)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/sync.go Manager.SetSyncedTo 93.94% (31/33)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/address.go managedAddress.PrivKey 91.67% (11/12)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go deserializeBIP0044AccountRow 90.48% (19/21)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go Manager.keyToManaged 90.00% (9/10)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go managerTx.FetchCryptoKeys 88.89% (16/18)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go Manager.Close 88.89% (8/9)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/address.go newManagedAddressWithoutPrivKey 87.50% (7/8)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go managerTx.PutRecentBlocks 85.71% (12/14)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go Open 85.71% (6/7)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go deserializeScriptAddress 84.62% (11/13)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go deserializeImportedAddress 84.62% (11/13)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go managerTx.FetchRecentBlocks 84.62% (11/13)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go managerTx.FetchMasterKeyParams 84.62% (11/13)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go deserializeAddressRow 83.33% (10/12)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go Manager.loadAndCacheAddress 83.33% (10/12)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/address.go managedAddress.unlock 81.82% (9/11)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/address.go scriptAddress.unlock 81.82% (9/11)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go Manager.nextAddresses 80.00% (52/65)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go managerTx.PutScriptAddress 80.00% (4/5)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go Manager.ChangePassphrase 79.10% (53/67)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go managerTx.PutChainedAddress 78.26% (18/23)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go managerTx.FetchSyncedTo 77.78% (7/9)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go managerTx.PutStartBlock 77.78% (7/9)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go managerTx.FetchStartBlock 77.78% (7/9)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go managerTx.PutSyncedTo 77.78% (7/9)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go Manager.existsAddress 77.78% (7/9)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go deserializeAccountRow 77.78% (7/9)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go Manager.ExportWatchingOnly 75.00% (12/16)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/address.go newManagedAddressFromExtKey 75.00% (12/16)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/address.go newManagedAddress 75.00% (9/12)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go managerTx.PutWatchingOnly 75.00% (6/8)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go managerTx.PutNumAccounts 75.00% (6/8)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/address.go newScriptAddress 75.00% (3/4)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go defaultNewCryptoKey 75.00% (3/4)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go Manager.chainAddressRowToManaged 75.00% (3/4)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go checkBranchKeys 75.00% (3/4)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go Manager.deriveKeyFromPath 75.00% (3/4)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go loadManager 72.55% (37/51)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go managerTx.putAddress 71.43% (5/7)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go deserializeChainedAddress 71.43% (5/7)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go Manager.deriveKey 69.23% (9/13)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go Manager.ImportScript 67.44% (29/43)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go Manager.Unlock 67.35% (33/49)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go managerTx.FetchAddress 66.67% (10/15)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go Manager.importedAddressRowToManaged 66.67% (10/15)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go managerTx.PutMasterKeyParams 66.67% (8/12)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go Manager.LastInternalAddress 66.67% (6/9)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go Manager.LastExternalAddress 66.67% (6/9)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go managerTx.putAccountRow 66.67% (4/6)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go Manager.rowInterfaceToManaged 66.67% (4/6)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go Manager.NextExternalAddresses 66.67% (4/6)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go Manager.NextInternalAddresses 66.67% (4/6)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go managerTx.FetchWatchingOnly 66.67% (4/6)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/sync.go syncState.iter 66.67% (2/3)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go managerTx.DeletePrivateKeys 66.04% (35/53)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go openOrCreateDB 66.04% (35/53)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go Manager.ImportPrivateKey 64.71% (33/51)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go managerTx.PutCryptoKeys 64.71% (11/17)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go Manager.loadAccountInfo 62.96% (34/54)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go managerTx.FetchAccountInfo 61.54% (8/13)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go Manager.scriptAddressRowToManaged 60.00% (3/5)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go Create 58.59% (58/99)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go deriveAccountKey 53.85% (7/13)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go managerDB.Update 50.00% (4/8)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go managerDB.View 50.00% (4/8)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go managerDB.Close 50.00% (2/4)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go managerDB.CopyDB 45.45% (5/11)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go managerTx.FetchAllAddresses 0.00% (0/20)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go Manager.AllActiveAddresses 0.00% (0/16)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go managerDB.WriteTo 0.00% (0/11)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/sync.go BlockIterator.Next 0.00% (0/6)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/db.go managerTx.FetchNumAccounts 0.00% (0/6)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr/manager.go Manager.Export 0.00% (0/3)
|
|
||||||
github.com/lbryio/lbcwallet/waddrmgr ----------------------------------- 72.59% (1030/1419)
|
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# This script uses go tool cover to generate a test coverage report.
|
|
||||||
go test -coverprofile=cov.out && go tool cover -func=cov.out && rm -f cov.out
|
|
||||||
echo "============================================================"
|
|
||||||
(cd bdb && go test -coverprofile=cov.out && go tool cover -func=cov.out && \
|
|
||||||
rm -f cov.out)
|
|
|
@ -1,39 +0,0 @@
|
||||||
PASS
|
|
||||||
coverage: 100.0% of statements
|
|
||||||
ok github.com/lbryio/lbcwallet/walletdb 0.130s
|
|
||||||
github.com\lbryio\lbcwallet\walletdb\interface.go:190: RegisterDriver 100.0%
|
|
||||||
github.com\lbryio\lbcwallet\walletdb\interface.go:201: SupportedDrivers 100.0%
|
|
||||||
github.com\lbryio\lbcwallet\walletdb\interface.go:214: Create 100.0%
|
|
||||||
github.com\lbryio\lbcwallet\walletdb\interface.go:228: Open 100.0%
|
|
||||||
total: (statements) 100.0%
|
|
||||||
============================================================
|
|
||||||
PASS
|
|
||||||
coverage: 91.7% of statements
|
|
||||||
ok github.com/lbryio/lbcwallet/walletdb/bdb 0.149s
|
|
||||||
github.com\lbryio\lbcwallet\walletdb\bdb\db.go:28: convertErr 76.9%
|
|
||||||
github.com\lbryio\lbcwallet\walletdb\bdb\db.go:74: Bucket 100.0%
|
|
||||||
github.com\lbryio\lbcwallet\walletdb\bdb\db.go:90: CreateBucket 100.0%
|
|
||||||
github.com\lbryio\lbcwallet\walletdb\bdb\db.go:103: CreateBucketIfNotExists 100.0%
|
|
||||||
github.com\lbryio\lbcwallet\walletdb\bdb\db.go:116: DeleteBucket 100.0%
|
|
||||||
github.com\lbryio\lbcwallet\walletdb\bdb\db.go:129: ForEach 100.0%
|
|
||||||
github.com\lbryio\lbcwallet\walletdb\bdb\db.go:136: Writable 100.0%
|
|
||||||
github.com\lbryio\lbcwallet\walletdb\bdb\db.go:145: Put 100.0%
|
|
||||||
github.com\lbryio\lbcwallet\walletdb\bdb\db.go:157: Get 100.0%
|
|
||||||
github.com\lbryio\lbcwallet\walletdb\bdb\db.go:166: Delete 100.0%
|
|
||||||
github.com\lbryio\lbcwallet\walletdb\bdb\db.go:185: RootBucket 100.0%
|
|
||||||
github.com\lbryio\lbcwallet\walletdb\bdb\db.go:193: Commit 100.0%
|
|
||||||
github.com\lbryio\lbcwallet\walletdb\bdb\db.go:201: Rollback 100.0%
|
|
||||||
github.com\lbryio\lbcwallet\walletdb\bdb\db.go:227: Begin 85.7%
|
|
||||||
github.com\lbryio\lbcwallet\walletdb\bdb\db.go:249: View 100.0%
|
|
||||||
github.com\lbryio\lbcwallet\walletdb\bdb\db.go:270: Update 100.0%
|
|
||||||
github.com\lbryio\lbcwallet\walletdb\bdb\db.go:294: Namespace 93.3%
|
|
||||||
github.com\lbryio\lbcwallet\walletdb\bdb\db.go:329: DeleteNamespace 100.0%
|
|
||||||
github.com\lbryio\lbcwallet\walletdb\bdb\db.go:339: WriteTo 0.0%
|
|
||||||
github.com\lbryio\lbcwallet\walletdb\bdb\db.go:348: Close 100.0%
|
|
||||||
github.com\lbryio\lbcwallet\walletdb\bdb\db.go:353: fileExists 100.0%
|
|
||||||
github.com\lbryio\lbcwallet\walletdb\bdb\db.go:364: openDB 100.0%
|
|
||||||
github.com\lbryio\lbcwallet\walletdb\bdb\driver.go:34: parseArgs 100.0%
|
|
||||||
github.com\lbryio\lbcwallet\walletdb\bdb\driver.go:50: openDBDriver 100.0%
|
|
||||||
github.com\lbryio\lbcwallet\walletdb\bdb\driver.go:60: createDBDriver 100.0%
|
|
||||||
github.com\lbryio\lbcwallet\walletdb\bdb\driver.go:69: init 66.7%
|
|
||||||
total: (statements) 91.7%
|
|
Loading…
Reference in a new issue