Documentation ¶
Index ¶
- Constants
- Variables
- func NetworkDir(dataDir string, chainParams *chaincfg.Params) string
- type BtcWallet
- func (b *BtcWallet) BackEnd() string
- func (b *BtcWallet) ComputeInputScript(tx *wire.MsgTx, signDesc *input.SignDescriptor) (*input.Script, error)
- func (b *BtcWallet) ConfirmedBalance(confs int32) (btcutil.Amount, error)
- func (b *BtcWallet) CreateSimpleTx(outputs []*wire.TxOut, feeRate chainfee.SatPerKWeight, dryRun bool) (*txauthor.AuthoredTx, error)
- func (b *BtcWallet) FetchInputInfo(prevOut *wire.OutPoint) (*lnwallet.Utxo, error)
- func (b *BtcWallet) FinalizePsbt(packet *psbt.Packet) error
- func (b *BtcWallet) FundPsbt(packet *psbt.Packet, feeRate chainfee.SatPerKWeight) (int32, error)
- func (b *BtcWallet) GetBestBlock() (*chainhash.Hash, int32, error)
- func (b *BtcWallet) GetBlock(blockHash *chainhash.Hash) (*wire.MsgBlock, error)
- func (b *BtcWallet) GetBlockHash(blockHeight int64) (*chainhash.Hash, error)
- func (b *BtcWallet) GetRecoveryInfo() (bool, float64, error)
- func (b *BtcWallet) GetUtxo(op *wire.OutPoint, pkScript []byte, heightHint uint32, cancel <-chan struct{}) (*wire.TxOut, error)
- func (b *BtcWallet) InternalWallet() *base.Wallet
- func (b *BtcWallet) IsOurAddress(a btcutil.Address) bool
- func (b *BtcWallet) IsSynced() (bool, int64, error)
- func (b *BtcWallet) LabelTransaction(hash chainhash.Hash, label string, overwrite bool) error
- func (b *BtcWallet) LastUnusedAddress(addrType lnwallet.AddressType) (btcutil.Address, error)
- func (b *BtcWallet) LeaseOutput(id wtxmgr.LockID, op wire.OutPoint) (time.Time, error)
- func (b *BtcWallet) ListTransactionDetails(startHeight, endHeight int32) ([]*lnwallet.TransactionDetail, error)
- func (b *BtcWallet) ListUnspentWitness(minConfs, maxConfs int32) ([]*lnwallet.Utxo, error)
- func (b *BtcWallet) LockOutpoint(o wire.OutPoint)
- func (b *BtcWallet) NewAddress(t lnwallet.AddressType, change bool) (btcutil.Address, error)
- func (b *BtcWallet) PublishTransaction(tx *wire.MsgTx, label string) error
- func (b *BtcWallet) ReleaseOutput(id wtxmgr.LockID, op wire.OutPoint) error
- func (b *BtcWallet) SendOutputs(outputs []*wire.TxOut, feeRate chainfee.SatPerKWeight, minconf int32, ...) (*wire.MsgTx, error)
- func (b *BtcWallet) SignMessage(pubKey *btcec.PublicKey, msg []byte) (input.Signature, error)
- func (b *BtcWallet) SignOutputRaw(tx *wire.MsgTx, signDesc *input.SignDescriptor) (input.Signature, error)
- func (b *BtcWallet) Start() error
- func (b *BtcWallet) Stop() error
- func (b *BtcWallet) SubscribeTransactions() (lnwallet.TransactionSubscription, error)
- func (b *BtcWallet) UnlockOutpoint(o wire.OutPoint)
- type Config
Constants ¶
const ( // UnconfirmedHeight is the special case end height that is used to // obtain unconfirmed transactions from ListTransactionDetails. UnconfirmedHeight int32 = -1 )
Variables ¶
var ( // ErrOutputSpent is returned by the GetUtxo method if the target output // for lookup has already been spent. ErrOutputSpent = errors.New("target output has been spent") // ErrOutputNotFound signals that the desired output could not be // located. ErrOutputNotFound = errors.New("target output was not found") )
Functions ¶
Types ¶
type BtcWallet ¶
type BtcWallet struct {
// contains filtered or unexported fields
}
BtcWallet is an implementation of the lnwallet.WalletController interface backed by an active instance of btcwallet. At the time of the writing of this documentation, this implementation requires a full btcd node to operate.
func New ¶
New returns a new fully initialized instance of BtcWallet given a valid configuration struct.
func (*BtcWallet) BackEnd ¶
BackEnd returns the underlying ChainService's name as a string.
This is a part of the WalletController interface.
func (*BtcWallet) ComputeInputScript ¶
func (b *BtcWallet) ComputeInputScript(tx *wire.MsgTx, signDesc *input.SignDescriptor) (*input.Script, error)
ComputeInputScript generates a complete InputScript for the passed transaction with the signature as defined within the passed SignDescriptor. This method is capable of generating the proper input script for both regular p2wkh output and p2wkh outputs nested within a regular p2sh output.
This is a part of the WalletController interface.
func (*BtcWallet) ConfirmedBalance ¶
ConfirmedBalance returns the sum of all the wallet's unspent outputs that have at least confs confirmations. If confs is set to zero, then all unspent outputs, including those currently in the mempool will be included in the final sum.
This is a part of the WalletController interface.
func (*BtcWallet) CreateSimpleTx ¶
func (b *BtcWallet) CreateSimpleTx(outputs []*wire.TxOut, feeRate chainfee.SatPerKWeight, dryRun bool) (*txauthor.AuthoredTx, error)
CreateSimpleTx creates a Bitcoin transaction paying to the specified outputs. The transaction is not broadcasted to the network, but a new change address might be created in the wallet database. In the case the wallet has insufficient funds, or the outputs are non-standard, an error should be returned. This method also takes the target fee expressed in sat/kw that should be used when crafting the transaction.
NOTE: The dryRun argument can be set true to create a tx that doesn't alter the database. A tx created with this set to true SHOULD NOT be broadcasted.
NOTE: This method requires the global coin selection lock to be held.
This is a part of the WalletController interface.
func (*BtcWallet) FetchInputInfo ¶
FetchInputInfo queries for the WalletController's knowledge of the passed outpoint. If the base wallet determines this output is under its control, then the original txout should be returned. Otherwise, a non-nil error value of ErrNotMine should be returned instead.
This is a part of the WalletController interface.
func (*BtcWallet) FinalizePsbt ¶
FinalizePsbt expects a partial transaction with all inputs and outputs fully declared and tries to sign all inputs that belong to the wallet. Lnd must be the last signer of the transaction. That means, if there are any unsigned non-witness inputs or inputs without UTXO information attached or inputs without witness data that do not belong to lnd's wallet, this method will fail. If no error is returned, the PSBT is ready to be extracted and the final TX within to be broadcast.
NOTE: This method does NOT publish the transaction after it's been finalized successfully.
This is a part of the WalletController interface.
func (*BtcWallet) FundPsbt ¶
FundPsbt creates a fully populated PSBT packet that contains enough inputs to fund the outputs specified in the passed in packet with the specified fee rate. If there is change left, a change output from the internal wallet is added and the index of the change output is returned. Otherwise no additional output is created and the index -1 is returned.
NOTE: If the packet doesn't contain any inputs, coin selection is performed automatically. If the packet does contain any inputs, it is assumed that full coin selection happened externally and no additional inputs are added. If the specified inputs aren't enough to fund the outputs with the given fee rate, an error is returned. No lock lease is acquired for any of the selected/validated inputs. It is in the caller's responsibility to lock the inputs before handing them out.
This is a part of the WalletController interface.
func (*BtcWallet) GetBestBlock ¶
GetBestBlock returns the current height and hash of the best known block within the main chain.
This method is a part of the lnwallet.BlockChainIO interface.
func (*BtcWallet) GetBlock ¶
GetBlock returns a raw block from the server given its hash.
This method is a part of the lnwallet.BlockChainIO interface.
func (*BtcWallet) GetBlockHash ¶
GetBlockHash returns the hash of the block in the best blockchain at the given height.
This method is a part of the lnwallet.BlockChainIO interface.
func (*BtcWallet) GetRecoveryInfo ¶
GetRecoveryInfo returns a boolean indicating whether the wallet is started in recovery mode. It also returns a float64, ranging from 0 to 1, representing the recovery progress made so far.
This is a part of the WalletController interface.
func (*BtcWallet) GetUtxo ¶
func (b *BtcWallet) GetUtxo(op *wire.OutPoint, pkScript []byte, heightHint uint32, cancel <-chan struct{}) (*wire.TxOut, error)
GetUtxo returns the original output referenced by the passed outpoint that creates the target pkScript.
This method is a part of the lnwallet.BlockChainIO interface.
func (*BtcWallet) InternalWallet ¶
InternalWallet returns a pointer to the internal base wallet which is the core of btcwallet.
func (*BtcWallet) IsOurAddress ¶
IsOurAddress checks if the passed address belongs to this wallet
This is a part of the WalletController interface.
func (*BtcWallet) IsSynced ¶
IsSynced returns a boolean indicating if from the PoV of the wallet, it has fully synced to the current best block in the main chain.
This is a part of the WalletController interface.
func (*BtcWallet) LabelTransaction ¶
LabelTransaction adds a label to a transaction. If the tx already has a label, this call will fail unless the overwrite parameter is set. Labels must not be empty, and they are limited to 500 chars.
Note: it is part of the WalletController interface.
func (*BtcWallet) LastUnusedAddress ¶
LastUnusedAddress returns the last *unused* address known by the wallet. An address is unused if it hasn't received any payments. This can be useful in UIs in order to continually show the "freshest" address without having to worry about "address inflation" caused by continual refreshing. Similar to NewAddress it can derive a specified address type, and also optionally a change address.
func (*BtcWallet) LeaseOutput ¶
LeaseOutput locks an output to the given ID, preventing it from being available for any future coin selection attempts. The absolute time of the lock's expiration is returned. The expiration of the lock can be extended by successive invocations of this call. Outputs can be unlocked before their expiration through `ReleaseOutput`.
If the output is not known, wtxmgr.ErrUnknownOutput is returned. If the output has already been locked to a different ID, then wtxmgr.ErrOutputAlreadyLocked is returned.
NOTE: This method requires the global coin selection lock to be held.
func (*BtcWallet) ListTransactionDetails ¶
func (b *BtcWallet) ListTransactionDetails(startHeight, endHeight int32) ([]*lnwallet.TransactionDetail, error)
ListTransactionDetails returns a list of all transactions which are relevant to the wallet. It takes inclusive start and end height to allow paginated queries. Unconfirmed transactions can be included in the query by providing endHeight = UnconfirmedHeight (= -1).
This is a part of the WalletController interface.
func (*BtcWallet) ListUnspentWitness ¶
ListUnspentWitness returns a slice of all the unspent outputs the wallet controls which pay to witness programs either directly or indirectly.
NOTE: This method requires the global coin selection lock to be held.
This is a part of the WalletController interface.
func (*BtcWallet) LockOutpoint ¶
LockOutpoint marks an outpoint as locked meaning it will no longer be deemed as eligible for coin selection. Locking outputs are utilized in order to avoid race conditions when selecting inputs for usage when funding a channel.
NOTE: This method requires the global coin selection lock to be held.
This is a part of the WalletController interface.
func (*BtcWallet) NewAddress ¶
NewAddress returns the next external or internal address for the wallet dictated by the value of the `change` parameter. If change is true, then an internal address will be returned, otherwise an external address should be returned.
This is a part of the WalletController interface.
func (*BtcWallet) PublishTransaction ¶
PublishTransaction performs cursory validation (dust checks, etc), then finally broadcasts the passed transaction to the Bitcoin network. If publishing the transaction fails, an error describing the reason is returned (currently ErrDoubleSpend). If the transaction is already published to the network (either in the mempool or chain) no error will be returned.
func (*BtcWallet) ReleaseOutput ¶
ReleaseOutput unlocks an output, allowing it to be available for coin selection if it remains unspent. The ID should match the one used to originally lock the output.
NOTE: This method requires the global coin selection lock to be held.
func (*BtcWallet) SendOutputs ¶
func (b *BtcWallet) SendOutputs(outputs []*wire.TxOut, feeRate chainfee.SatPerKWeight, minconf int32, label string) (*wire.MsgTx, error)
SendOutputs funds, signs, and broadcasts a Bitcoin transaction paying out to the specified outputs. In the case the wallet has insufficient funds, or the outputs are non-standard, a non-nil error will be returned.
NOTE: This method requires the global coin selection lock to be held.
This is a part of the WalletController interface.
func (*BtcWallet) SignMessage ¶
SignMessage attempts to sign a target message with the private key that corresponds to the passed public key. If the target private key is unable to be found, then an error will be returned. The actual digest signed is the double SHA-256 of the passed message.
NOTE: This is a part of the MessageSigner interface.
func (*BtcWallet) SignOutputRaw ¶
func (b *BtcWallet) SignOutputRaw(tx *wire.MsgTx, signDesc *input.SignDescriptor) (input.Signature, error)
SignOutputRaw generates a signature for the passed transaction according to the data within the passed SignDescriptor.
This is a part of the WalletController interface.
func (*BtcWallet) Start ¶
Start initializes the underlying rpc connection, the wallet itself, and begins syncing to the current available blockchain state.
This is a part of the WalletController interface.
func (*BtcWallet) Stop ¶
Stop signals the wallet for shutdown. Shutdown may entail closing any active sockets, database handles, stopping goroutines, etc.
This is a part of the WalletController interface.
func (*BtcWallet) SubscribeTransactions ¶
func (b *BtcWallet) SubscribeTransactions() (lnwallet.TransactionSubscription, error)
SubscribeTransactions returns a TransactionSubscription client which is capable of receiving async notifications as new transactions related to the wallet are seen within the network, or found in blocks.
This is a part of the WalletController interface.
func (*BtcWallet) UnlockOutpoint ¶
UnlockOutpoint unlocks a previously locked output, marking it eligible for coin selection.
NOTE: This method requires the global coin selection lock to be held.
This is a part of the WalletController interface.
type Config ¶
type Config struct { // DataDir is the name of the directory where the wallet's persistent // state should be stored. DataDir string // LogDir is the name of the directory which should be used to store // generated log files. LogDir string // PrivatePass is the private password to the underlying btcwallet // instance. Without this, the wallet cannot be decrypted and operated. PrivatePass []byte // PublicPass is the optional public password to btcwallet. This is // optionally used to encrypt public material such as public keys and // scripts. PublicPass []byte // HdSeed is an optional seed to feed into the wallet. If this is // unspecified, a new seed will be generated. HdSeed []byte // 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 // 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 // NetParams is the net parameters for the target chain. NetParams *chaincfg.Params // CoinType specifies the BIP 44 coin type to be used for derivation. CoinType uint32 // 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 // NoFreelistSync, if true, prevents the database from syncing its // freelist to disk, resulting in improved performance at the expense of // increased startup time. NoFreelistSync bool // DBTimeOut specifies the timeout value to use when opening the wallet // database. DBTimeOut time.Duration }
Config is a struct which houses configuration parameters which modify the instance of BtcWallet generated by the New() function.