2016-08-13 01:29:38 +03:00
|
|
|
package btcwallet
|
|
|
|
|
|
|
|
import (
|
|
|
|
"path/filepath"
|
2018-03-27 00:14:11 +03:00
|
|
|
"time"
|
2016-08-13 01:29:38 +03:00
|
|
|
|
2018-06-05 04:34:16 +03:00
|
|
|
"github.com/btcsuite/btcd/chaincfg"
|
|
|
|
"github.com/btcsuite/btcd/wire"
|
2017-02-24 16:31:38 +03:00
|
|
|
|
2018-06-05 04:34:16 +03:00
|
|
|
"github.com/btcsuite/btcwallet/chain"
|
|
|
|
"github.com/btcsuite/btcwallet/wallet"
|
2016-08-13 01:29:38 +03:00
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
|
|
|
// defaultPubPassphrase is the default public wallet passphrase which is
|
|
|
|
// used when the user indicates they do not want additional protection
|
|
|
|
// provided by having all public data in the wallet encrypted by a
|
|
|
|
// passphrase only known to them.
|
|
|
|
defaultPubPassphrase = []byte("public")
|
|
|
|
)
|
|
|
|
|
2017-12-18 05:40:05 +03:00
|
|
|
// Config is a struct which houses configuration parameters which modify the
|
2016-08-13 01:29:38 +03:00
|
|
|
// instance of BtcWallet generated by the New() function.
|
|
|
|
type Config struct {
|
|
|
|
// LogDir is the name of the directory which should be used to store
|
|
|
|
// generated log files.
|
|
|
|
LogDir string
|
|
|
|
|
2017-05-25 03:34:03 +03:00
|
|
|
// PrivatePass is the private password to the underlying btcwallet
|
|
|
|
// instance. Without this, the wallet cannot be decrypted and operated.
|
|
|
|
PrivatePass []byte
|
2016-08-13 01:29:38 +03:00
|
|
|
|
2017-05-25 03:34:03 +03:00
|
|
|
// PublicPass is the optional public password to btcwallet. This is
|
|
|
|
// optionally used to encrypt public material such as public keys and
|
|
|
|
// scripts.
|
|
|
|
PublicPass []byte
|
2016-08-13 01:29:38 +03:00
|
|
|
|
2017-05-25 03:34:03 +03:00
|
|
|
// HdSeed is an optional seed to feed into the wallet. If this is
|
|
|
|
// unspecified, a new seed will be generated.
|
|
|
|
HdSeed []byte
|
2016-08-13 01:29:38 +03:00
|
|
|
|
2018-03-27 00:14:11 +03:00
|
|
|
// Birthday specifies the time at which this wallet was initially
|
|
|
|
// created. It is used to bound rescans for used addresses.
|
|
|
|
Birthday time.Time
|
|
|
|
|
|
|
|
// RecoveryWindow specifies the address look-ahead for which to scan
|
|
|
|
// when restoring a wallet. The recovery window will apply to all
|
|
|
|
// default BIP44 derivation paths.
|
|
|
|
RecoveryWindow uint32
|
|
|
|
|
2017-05-25 03:34:03 +03:00
|
|
|
// ChainSource is the primary chain interface. This is used to operate
|
|
|
|
// the wallet and do things such as rescanning, sending transactions,
|
|
|
|
// notifications for received funds, etc.
|
|
|
|
ChainSource chain.Interface
|
2016-08-13 01:29:38 +03:00
|
|
|
|
2017-05-25 03:34:03 +03:00
|
|
|
// NetParams is the net parameters for the target chain.
|
2016-08-13 01:29:38 +03:00
|
|
|
NetParams *chaincfg.Params
|
2018-03-13 03:33:55 +03:00
|
|
|
|
|
|
|
// CoinType specifies the BIP 44 coin type to be used for derivation.
|
|
|
|
CoinType uint32
|
2018-05-22 10:29:54 +03:00
|
|
|
|
|
|
|
// Wallet is an unlocked wallet instance that is set if the
|
|
|
|
// UnlockerService has already opened and unlocked the wallet. If this
|
|
|
|
// is nil, then a wallet might have just been created or is simply not
|
|
|
|
// encrypted at all, in which case it should be attempted to be loaded
|
|
|
|
// normally when creating the BtcWallet.
|
|
|
|
Wallet *wallet.Wallet
|
2019-10-04 18:10:49 +03:00
|
|
|
|
2021-03-05 01:13:06 +03:00
|
|
|
// LoaderOptions holds functional wallet db loader options.
|
|
|
|
LoaderOptions []LoaderOption
|
2021-03-29 16:23:46 +03:00
|
|
|
|
|
|
|
// CoinSelectionStrategy is the strategy that is used for selecting
|
|
|
|
// coins when funding a transaction.
|
|
|
|
CoinSelectionStrategy wallet.CoinSelectionStrategy
|
2016-08-13 01:29:38 +03:00
|
|
|
}
|
|
|
|
|
2017-10-12 12:07:58 +03:00
|
|
|
// NetworkDir returns the directory name of a network directory to hold wallet
|
2016-08-13 01:29:38 +03:00
|
|
|
// files.
|
2017-10-12 12:07:58 +03:00
|
|
|
func NetworkDir(dataDir string, chainParams *chaincfg.Params) string {
|
2016-08-13 01:29:38 +03:00
|
|
|
netname := chainParams.Name
|
|
|
|
|
|
|
|
// For now, we must always name the testnet data directory as "testnet"
|
|
|
|
// and not "testnet3" or any other version, as the chaincfg testnet3
|
2017-06-08 03:01:17 +03:00
|
|
|
// parameters will likely be switched to being named "testnet3" in the
|
2016-08-13 01:29:38 +03:00
|
|
|
// future. This is done to future proof that change, and an upgrade
|
|
|
|
// plan to move the testnet3 data directory can be worked out later.
|
|
|
|
if chainParams.Net == wire.TestNet3 {
|
|
|
|
netname = "testnet"
|
|
|
|
}
|
|
|
|
|
|
|
|
return filepath.Join(dataDir, netname)
|
|
|
|
}
|