lnwallet: refactor all wallet/channel interaction to use the WalletController.
This commit performs a major refactor of the current wallet, reservation, and channel code in order to call into a WalletController implementation rather than directly into btcwallet. The current set of wallets tests have been modified in order to test against *all* registered WalletController implementations rather than only btcwallet. As a result, all future WalletControllers primary need to ensure that their implementation passes the current set of tests (which will be expanded into the future), providing an easy path of integration assurance. Rather than directly holding the private keys throughout funding and channel creation, the burden of securing keys has been shifted to the specified WalletController and Signer interfaces. All signing is done via the Signer interface rather than directly, increasing flexibility dramatically. During channel funding, rather than creating a txscript.Engine to verify commitment signatures, regular ECDSA sig verification is now used instead. This is faster and more efficient. Finally certain fields/methods within ChannelReservation and LightningChannel have been exposed publicly in order to restrict the amount of modifications the prior tests needed to undergo in order to support testing directly agains the WalletController interface.
This commit is contained in:
5 files changed
+538
-575
No files matched your search
+24
-4
@@ -88,7 +88,6 @@ type InputScript struct {
|
||||
// as a signature to our version of the commitment transaction.
|
||||
// * We then verify the validity of all signatures before considering the
|
||||
// channel "open".
|
||||
// TODO(roasbeef): update with single funder description
|
||||
type ChannelReservation struct {
|
||||
// This mutex MUST be held when either reading or modifying any of the
|
||||
// fields below.
|
||||
@@ -131,11 +130,11 @@ type ChannelReservation struct {
|
||||
wallet *LightningWallet
|
||||
}
|
||||
|
||||
// newChannelReservation creates a new channel reservation. This function is
|
||||
// NewChannelReservation creates a new channel reservation. This function is
|
||||
// used only internally by lnwallet. In order to concurrent safety, the creation
|
||||
// of all channel reservations should be carried out via the
|
||||
// lnwallet.InitChannelReservation interface.
|
||||
func newChannelReservation(capacity, fundingAmt btcutil.Amount, minFeeRate btcutil.Amount,
|
||||
func NewChannelReservation(capacity, fundingAmt btcutil.Amount, minFeeRate btcutil.Amount,
|
||||
wallet *LightningWallet, id uint64, numConfs uint16) *ChannelReservation {
|
||||
var ourBalance btcutil.Amount
|
||||
var theirBalance btcutil.Amount
|
||||
@@ -160,7 +159,7 @@ func newChannelReservation(capacity, fundingAmt btcutil.Amount, minFeeRate btcut
|
||||
OurBalance: ourBalance,
|
||||
TheirBalance: theirBalance,
|
||||
MinFeePerKb: minFeeRate,
|
||||
Db: wallet.channelDB,
|
||||
Db: wallet.ChannelDB,
|
||||
},
|
||||
numConfsToOpen: numConfs,
|
||||
reservationID: id,
|
||||
@@ -315,6 +314,26 @@ func (r *ChannelReservation) FinalFundingTx() *wire.MsgTx {
|
||||
return r.fundingTx
|
||||
}
|
||||
|
||||
// FundingRedeemScript returns the fully populated funding redeem script.
|
||||
//
|
||||
// NOTE: This method will only return a non-nil value after either
|
||||
// ProcesContribution or ProcessSingleContribution have been executed and
|
||||
// returned without error.
|
||||
func (r *ChannelReservation) FundingRedeemScript() []byte {
|
||||
r.RLock()
|
||||
defer r.RUnlock()
|
||||
return r.partialState.FundingRedeemScript
|
||||
}
|
||||
|
||||
// LocalCommitTx returns the commitment transaction for the local node involved
|
||||
// in this funding reservation.
|
||||
func (r *ChannelReservation) LocalCommitTx() *wire.MsgTx {
|
||||
r.RLock()
|
||||
defer r.RUnlock()
|
||||
|
||||
return r.partialState.OurCommitTx
|
||||
}
|
||||
|
||||
// FundingOutpoint returns the outpoint of the funding transaction.
|
||||
//
|
||||
// NOTE: The pointer returned will only be set once the .ProcesContribution()
|
||||
@@ -346,6 +365,7 @@ func (r *ChannelReservation) Cancel() error {
|
||||
// transaction for this pending payment channel obtains the configured number
|
||||
// of confirmations. Once confirmations have been obtained, a fully initialized
|
||||
// LightningChannel instance is returned, allowing for channel updates.
|
||||
//
|
||||
// NOTE: If this method is called before .CompleteReservation(), it will block
|
||||
// indefinitely.
|
||||
func (r *ChannelReservation) DispatchChan() <-chan *LightningChannel {
|
||||
|
||||
Reference in new issue
Block a user