Skip to content
33 changes: 33 additions & 0 deletions config_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -679,6 +679,12 @@ func (d *DefaultWalletImpl) BuildChainControl(
return nil, nil, err
}

fingerprint, err := getWalletFingerprint(walletController)
if err != nil {
d.logger.Error(err)
return nil, nil, err
}

keyRing := keychain.NewBtcWalletKeyRing(
walletController.InternalWallet(), walletConfig.CoinType,
)
Expand All @@ -695,6 +701,7 @@ func (d *DefaultWalletImpl) BuildChainControl(
ChainIO: walletController,
DefaultConstraints: partialChainControl.ChannelConstraints,
NetParams: *walletConfig.NetParams,
Fingerprint: fingerprint,
}

// The broadcast is already always active for neutrino nodes, so we
Expand Down Expand Up @@ -787,6 +794,12 @@ func (d *RPCSignerWalletImpl) BuildChainControl(
walletController.InternalWallet(), walletConfig.CoinType,
)

fingerprint, err := getWalletFingerprint(walletController)
if err != nil {
d.logger.Error(err)
return nil, nil, err
}

rpcKeyRing, err := rpcwallet.NewRPCKeyRing(
baseKeyRing, walletController,
d.DefaultWalletImpl.cfg.RemoteSigner, walletConfig.NetParams,
Expand All @@ -810,6 +823,7 @@ func (d *RPCSignerWalletImpl) BuildChainControl(
ChainIO: walletController,
DefaultConstraints: partialChainControl.ChannelConstraints,
NetParams: *walletConfig.NetParams,
Fingerprint: fingerprint,
}

// We've created the wallet configuration now, so we can finish
Expand Down Expand Up @@ -1464,3 +1478,22 @@ func broadcastErrorMapper(err error) error {

return returnErr
}

// getWalletFingerprint gets the root key fingerprint for the "default" account
// of the wallet. This is used to create the lnwallet configuration for the
// chain control, to send onto the signer when funding channels.
func getWalletFingerprint(wc *btcwallet.BtcWallet) (uint32, error) {
scope, account, err := wc.InternalWallet().LookupAccount("default")
if err != nil {
return 0, fmt.Errorf("unable to look up default account: "+
"%w", err)
}

props, err := wc.InternalWallet().AccountProperties(scope, account)
if err != nil {
return 0, fmt.Errorf("unable to get default account "+
"properties: %w", err)
}

return props.MasterKeyFingerprint, nil
}
14 changes: 13 additions & 1 deletion contractcourt/breacharbiter_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2245,7 +2245,7 @@ func createInitChannels(t *testing.T, revocationWindow int) (
}
aliceCommitPoint := input.ComputeCommitmentPoint(aliceFirstRevoke[:])

aliceCommitTx, bobCommitTx, err := lnwallet.CreateCommitmentTxns(
aliceCommitTx, _, bobCommitTx, _, err := lnwallet.CreateCommitmentTxns(
channelBal, channelBal, &aliceCfg, &bobCfg, aliceCommitPoint,
bobCommitPoint, *fundingTxIn, channeldb.SingleFunderTweaklessBit,
false, 0,
Expand Down Expand Up @@ -2347,6 +2347,18 @@ func createInitChannels(t *testing.T, revocationWindow int) (
[]*btcec.PrivateKey{aliceKeyPriv}, nil,
)
bobSigner := input.NewMockSigner([]*btcec.PrivateKey{bobKeyPriv}, nil)
aliceSigner.SignDescriptorChecker = &input.DefaultSignDescriptorChecker{
OutChecker: lnwallet.GetCommitmentOutChecker(
t, channeldb.SingleFunderTweaklessBit, true,
aliceCfg, bobCfg,
),
}
bobSigner.SignDescriptorChecker = &input.DefaultSignDescriptorChecker{
OutChecker: lnwallet.GetCommitmentOutChecker(
t, channeldb.SingleFunderTweaklessBit, false,
bobCfg, aliceCfg,
),
}

alicePool := lnwallet.NewSigPool(1, aliceSigner)
channelAlice, err := lnwallet.NewLightningChannel(
Expand Down
14 changes: 13 additions & 1 deletion htlcswitch/test_utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,7 @@ func createTestChannel(t *testing.T, alicePrivKey, bobPrivKey []byte,
}
aliceCommitPoint := input.ComputeCommitmentPoint(aliceFirstRevoke[:])

aliceCommitTx, bobCommitTx, err := lnwallet.CreateCommitmentTxns(
aliceCommitTx, _, bobCommitTx, _, err := lnwallet.CreateCommitmentTxns(
aliceAmount, bobAmount, &aliceCfg, &bobCfg, aliceCommitPoint,
bobCommitPoint, *fundingTxIn, channeldb.SingleFunderTweaklessBit,
isAliceInitiator, 0,
Expand Down Expand Up @@ -343,6 +343,18 @@ func createTestChannel(t *testing.T, alicePrivKey, bobPrivKey []byte,
bobSigner := input.NewMockSigner(
[]*btcec.PrivateKey{bobKeyPriv}, nil,
)
aliceSigner.SignDescriptorChecker = &input.DefaultSignDescriptorChecker{
OutChecker: lnwallet.GetCommitmentOutChecker(
t, channeldb.SingleFunderTweaklessBit,
isAliceInitiator, aliceCfg, bobCfg,
),
}
bobSigner.SignDescriptorChecker = &input.DefaultSignDescriptorChecker{
OutChecker: lnwallet.GetCommitmentOutChecker(
t, channeldb.SingleFunderTweaklessBit,
!isAliceInitiator, bobCfg, aliceCfg,
),
}

alicePool := lnwallet.NewSigPool(runtime.NumCPU(), aliceSigner)
channelAlice, err := lnwallet.NewLightningChannel(
Expand Down
Loading