consolidate: remove obsoleted files

This commit is contained in:
Roy Lee 2022-09-28 22:27:03 -07:00
parent 79da868c74
commit 1917978ae8
10 changed files with 0 additions and 1312 deletions

527
CHANGES
View file

@ -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

View file

@ -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
}

View file

@ -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
}

View file

@ -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

View file

@ -1,3 +0,0 @@
### Guides
[Rebuilding all transaction history with forced rescans](https://github.com/lbryio/lbcwallet/tree/master/docs/force_rescans.md)

View file

@ -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)
```

View file

@ -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

View file

@ -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)

View file

@ -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)

View file

@ -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%