diff --git a/CHANGES b/CHANGES deleted file mode 100644 index fdd8a9f..0000000 --- a/CHANGES +++ /dev/null @@ -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 diff --git a/cmd/dropwtxmgr/main.go b/cmd/dropwtxmgr/main.go deleted file mode 100644 index 1e5d487..0000000 --- a/cmd/dropwtxmgr/main.go +++ /dev/null @@ -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 -} diff --git a/cmd/sweepaccount/main.go b/cmd/sweepaccount/main.go deleted file mode 100644 index f38c9ce..0000000 --- a/cmd/sweepaccount/main.go +++ /dev/null @@ -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 -} diff --git a/deps.txt b/deps.txt deleted file mode 100644 index 607e3f5..0000000 --- a/deps.txt +++ /dev/null @@ -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 diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 029dc11..0000000 --- a/docs/README.md +++ /dev/null @@ -1,3 +0,0 @@ -### Guides - -[Rebuilding all transaction history with forced rescans](https://github.com/lbryio/lbcwallet/tree/master/docs/force_rescans.md) diff --git a/docs/force_rescans.md b/docs/force_rescans.md deleted file mode 100644 index 42bc2ea..0000000 --- a/docs/force_rescans.md +++ /dev/null @@ -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) - -``` diff --git a/waddrmgr/cov_report.sh b/waddrmgr/cov_report.sh deleted file mode 100644 index 307f05b..0000000 --- a/waddrmgr/cov_report.sh +++ /dev/null @@ -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 diff --git a/waddrmgr/test_coverage.txt b/waddrmgr/test_coverage.txt deleted file mode 100644 index ef9c82b..0000000 --- a/waddrmgr/test_coverage.txt +++ /dev/null @@ -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) - diff --git a/walletdb/cov_report.sh b/walletdb/cov_report.sh deleted file mode 100644 index 6d54bef..0000000 --- a/walletdb/cov_report.sh +++ /dev/null @@ -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) diff --git a/walletdb/test_coverage.txt b/walletdb/test_coverage.txt deleted file mode 100644 index 3309326..0000000 --- a/walletdb/test_coverage.txt +++ /dev/null @@ -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%