mirror of https://github.com/BTCPrivate/lnd.git
lnwallet: disallow creating a funding reservation with zero total satoshis
This commit is contained in:
parent
e6394a0862
commit
5d6b8e49a3
|
@ -140,17 +140,25 @@ func NewChannelReservation(capacity, fundingAmt btcutil.Amount, minFeeRate btcut
|
|||
var ourBalance btcutil.Amount
|
||||
var theirBalance btcutil.Amount
|
||||
|
||||
// If we're the responder to a single-funder reservation, then we have
|
||||
// no initial balance in the channel.
|
||||
if fundingAmt == 0 {
|
||||
ourBalance = 0
|
||||
theirBalance = capacity - commitFee
|
||||
} else {
|
||||
// TODO(roasbeef): need to rework fee structure in general and
|
||||
// also when we "unlock" dual funder within the daemon
|
||||
if capacity == fundingAmt+commitFee { // Single funder
|
||||
|
||||
// If we're initiating a single funder workflow, then we pay
|
||||
// all the initial fees within the commitment transaction.
|
||||
if capacity == fundingAmt+commitFee {
|
||||
ourBalance = capacity - commitFee
|
||||
// Otherwise, this is a dual funder workflow where both slides
|
||||
// split the amount funded and the commitment fee.
|
||||
} else {
|
||||
ourBalance = fundingAmt - commitFee
|
||||
}
|
||||
|
||||
theirBalance = capacity - fundingAmt - commitFee
|
||||
}
|
||||
|
||||
|
|
|
@ -495,6 +495,14 @@ func (l *LightningWallet) InitChannelReservation(capacity,
|
|||
// handleFundingReserveRequest processes a message intending to create, and
|
||||
// validate a funding reservation request.
|
||||
func (l *LightningWallet) handleFundingReserveRequest(req *initFundingReserveMsg) {
|
||||
// It isn't possible to create a channel with zero funds committed.
|
||||
if req.fundingAmount+req.capacity == 0 {
|
||||
req.err <- fmt.Errorf("cannot have channel with zero " +
|
||||
"satoshis funded")
|
||||
req.resp <- nil
|
||||
return
|
||||
}
|
||||
|
||||
id := atomic.AddUint64(&l.nextFundingID, 1)
|
||||
totalCapacity := req.capacity + commitFee
|
||||
reservation := NewChannelReservation(totalCapacity, req.fundingAmount,
|
||||
|
@ -612,11 +620,11 @@ func (l *LightningWallet) handleFundingCancelRequest(req *fundingReserveCancelMs
|
|||
req.err <- nil
|
||||
}
|
||||
|
||||
// handleFundingCounterPartyFunds processes the second workflow step for the
|
||||
// lifetime of a channel reservation. Upon completion, the reservation will
|
||||
// carry a completed funding transaction (minus the counterparty's input
|
||||
// signatures), both versions of the commitment transaction, and our signature
|
||||
// for their version of the commitment transaction.
|
||||
// handleContributionMsg processes the second workflow step for the lifetime of
|
||||
// a channel reservation. Upon completion, the reservation will carry a
|
||||
// completed funding transaction (minus the counterparty's input signatures),
|
||||
// both versions of the commitment transaction, and our signature for their
|
||||
// version of the commitment transaction.
|
||||
func (l *LightningWallet) handleContributionMsg(req *addContributionMsg) {
|
||||
l.limboMtx.Lock()
|
||||
pendingReservation, ok := l.fundingLimbo[req.pendingFundingID]
|
||||
|
|
Loading…
Reference in New Issue