lnwallet+mock: add new PSBT methods
This commit is contained in:
parent
9f5f98e736
commit
f947576f33
@ -10,6 +10,7 @@ import (
|
|||||||
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||||
"github.com/btcsuite/btcd/wire"
|
"github.com/btcsuite/btcd/wire"
|
||||||
"github.com/btcsuite/btcutil"
|
"github.com/btcsuite/btcutil"
|
||||||
|
"github.com/btcsuite/btcutil/psbt"
|
||||||
"github.com/btcsuite/btcwallet/wallet/txauthor"
|
"github.com/btcsuite/btcwallet/wallet/txauthor"
|
||||||
"github.com/btcsuite/btcwallet/wtxmgr"
|
"github.com/btcsuite/btcwallet/wtxmgr"
|
||||||
|
|
||||||
@ -141,6 +142,18 @@ func (w *WalletController) ReleaseOutput(wtxmgr.LockID, wire.OutPoint) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FundPsbt currently does nothing.
|
||||||
|
func (w *WalletController) FundPsbt(_ *psbt.Packet,
|
||||||
|
_ chainfee.SatPerKWeight) (int32, error) {
|
||||||
|
|
||||||
|
return 0, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// FinalizePsbt currently does nothing.
|
||||||
|
func (w *WalletController) FinalizePsbt(_ *psbt.Packet) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// PublishTransaction sends a transaction to the PublishedTransactions chan.
|
// PublishTransaction sends a transaction to the PublishedTransactions chan.
|
||||||
func (w *WalletController) PublishTransaction(tx *wire.MsgTx, _ string) error {
|
func (w *WalletController) PublishTransaction(tx *wire.MsgTx, _ string) error {
|
||||||
w.PublishedTransactions <- tx
|
w.PublishedTransactions <- tx
|
||||||
|
@ -13,6 +13,7 @@ import (
|
|||||||
"github.com/btcsuite/btcd/txscript"
|
"github.com/btcsuite/btcd/txscript"
|
||||||
"github.com/btcsuite/btcd/wire"
|
"github.com/btcsuite/btcd/wire"
|
||||||
"github.com/btcsuite/btcutil"
|
"github.com/btcsuite/btcutil"
|
||||||
|
"github.com/btcsuite/btcutil/psbt"
|
||||||
"github.com/btcsuite/btcwallet/chain"
|
"github.com/btcsuite/btcwallet/chain"
|
||||||
"github.com/btcsuite/btcwallet/waddrmgr"
|
"github.com/btcsuite/btcwallet/waddrmgr"
|
||||||
base "github.com/btcsuite/btcwallet/wallet"
|
base "github.com/btcsuite/btcwallet/wallet"
|
||||||
@ -690,6 +691,51 @@ func (b *BtcWallet) ListTransactionDetails(startHeight,
|
|||||||
return txDetails, nil
|
return txDetails, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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 (b *BtcWallet) FundPsbt(packet *psbt.Packet,
|
||||||
|
feeRate chainfee.SatPerKWeight) (int32, error) {
|
||||||
|
|
||||||
|
// The fee rate is passed in using units of sat/kw, so we'll convert
|
||||||
|
// this to sat/KB as the CreateSimpleTx method requires this unit.
|
||||||
|
feeSatPerKB := btcutil.Amount(feeRate.FeePerKVByte())
|
||||||
|
|
||||||
|
// Let the wallet handle coin selection and/or fee estimation based on
|
||||||
|
// the partial TX information in the packet.
|
||||||
|
return b.wallet.FundPsbt(packet, defaultAccount, feeSatPerKB)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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 (b *BtcWallet) FinalizePsbt(packet *psbt.Packet) error {
|
||||||
|
return b.wallet.FinalizePsbt(packet)
|
||||||
|
}
|
||||||
|
|
||||||
// txSubscriptionClient encapsulates the transaction notification client from
|
// txSubscriptionClient encapsulates the transaction notification client from
|
||||||
// the base wallet. Notifications received from the client will be proxied over
|
// the base wallet. Notifications received from the client will be proxied over
|
||||||
// two distinct channels.
|
// two distinct channels.
|
||||||
|
@ -10,6 +10,7 @@ import (
|
|||||||
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||||
"github.com/btcsuite/btcd/wire"
|
"github.com/btcsuite/btcd/wire"
|
||||||
"github.com/btcsuite/btcutil"
|
"github.com/btcsuite/btcutil"
|
||||||
|
"github.com/btcsuite/btcutil/psbt"
|
||||||
"github.com/btcsuite/btcwallet/wallet/txauthor"
|
"github.com/btcsuite/btcwallet/wallet/txauthor"
|
||||||
"github.com/btcsuite/btcwallet/wtxmgr"
|
"github.com/btcsuite/btcwallet/wtxmgr"
|
||||||
"github.com/lightningnetwork/lnd/input"
|
"github.com/lightningnetwork/lnd/input"
|
||||||
@ -273,6 +274,37 @@ type WalletController interface {
|
|||||||
// is set. Labels must not be empty, and they are limited to 500 chars.
|
// is set. Labels must not be empty, and they are limited to 500 chars.
|
||||||
LabelTransaction(hash chainhash.Hash, label string, overwrite bool) error
|
LabelTransaction(hash chainhash.Hash, label string, overwrite bool) error
|
||||||
|
|
||||||
|
// 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.
|
||||||
|
FundPsbt(packet *psbt.Packet, feeRate chainfee.SatPerKWeight) (int32,
|
||||||
|
error)
|
||||||
|
|
||||||
|
// 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.
|
||||||
|
FinalizePsbt(packet *psbt.Packet) error
|
||||||
|
|
||||||
// SubscribeTransactions returns a TransactionSubscription client which
|
// SubscribeTransactions returns a TransactionSubscription client which
|
||||||
// is capable of receiving async notifications as new transactions
|
// is capable of receiving async notifications as new transactions
|
||||||
// related to the wallet are seen within the network, or found in
|
// related to the wallet are seen within the network, or found in
|
||||||
|
Loading…
Reference in New Issue
Block a user