From f1717b962050a1fc73a30a4796a52a5f1cb38e65 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Tue, 29 Dec 2015 12:44:59 -0600 Subject: [PATCH] lnwallet: embed btwallet within LightningWallet, exposes all methods publicly * As a result in order to not over-shadow the Start/Stop methods of btcwallet.Wallet, the Start/Stop methods on LightningWallet have been renamed to Startup/Shutdown. --- lnwallet/wallet.go | 32 ++++++++++++++++---------------- lnwallet/wallet_test.go | 32 ++++++++++++++++---------------- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/lnwallet/wallet.go b/lnwallet/wallet.go index 1c10223d9..2c3d52495 100644 --- a/lnwallet/wallet.go +++ b/lnwallet/wallet.go @@ -205,7 +205,7 @@ type LightningWallet struct { // The core wallet, all non Lightning Network specific interaction is // proxied to the internal wallet. // TODO(roasbeef): Why isn't this just embedded again? - wallet *btcwallet.Wallet + *btcwallet.Wallet // An active RPC connection to a full-node. In the case of a btcd node, // websockets are used for notifications. If using Bitcoin Core, @@ -287,7 +287,7 @@ func NewLightningWallet(privWalletPass, pubWalletPass, hdSeed []byte, dataDir st return &LightningWallet{ db: db, - wallet: wallet, + Wallet: wallet, ChannelDB: channeldb.New(wallet.Manager, lnNamespace), msgChan: make(chan interface{}, msgBufferSize), // TODO(roasbeef): make this atomic.Uint32 instead? Which is @@ -299,9 +299,9 @@ func NewLightningWallet(privWalletPass, pubWalletPass, hdSeed []byte, dataDir st }, nil } -// Start establishes a connection to the RPC source, and spins up all +// Startup establishes a connection to the RPC source, and spins up all // goroutines required to handle incoming messages. -func (l *LightningWallet) Start() error { +func (l *LightningWallet) Startup() error { // Already started? if atomic.AddInt32(&l.started, 1) != 1 { return nil @@ -316,7 +316,7 @@ func (l *LightningWallet) Start() error { // Start the goroutines in the underlying wallet. l.rpc = rpcc - l.wallet.Start(rpcc) + l.Start(rpcc) l.wg.Add(1) // TODO(roasbeef): multiple request handlers? @@ -325,13 +325,13 @@ func (l *LightningWallet) Start() error { return nil } -// Stop gracefully shutsdown the wallet, and all active goroutines. -func (l *LightningWallet) Stop() error { +// Shutdown gracefully stops the wallet, and all active goroutines. +func (l *LightningWallet) Shutdown() error { if atomic.AddInt32(&l.shutdown, 1) != 1 { return nil } - l.wallet.Stop() + l.Stop() l.rpc.Shutdown() close(l.quit) @@ -431,7 +431,7 @@ func (l *LightningWallet) handleFundingReserveRequest(req *initFundingReserveMsg // Find all unlocked unspent outputs with greater than 6 confirmations. maxConfs := int32(math.MaxInt32) // TODO(roasbeef): make 6 a config paramter? - unspentOutputs, err := l.wallet.ListUnspent(6, maxConfs, nil) + unspentOutputs, err := l.ListUnspent(6, maxConfs, nil) if err != nil { l.coinSelectMtx.Unlock() req.err <- err @@ -475,7 +475,7 @@ func (l *LightningWallet) handleFundingReserveRequest(req *initFundingReserveMsg ourContribution.Inputs = make([]*wire.TxIn, len(selectedCoins.Coins())) for i, coin := range selectedCoins.Coins() { txout := wire.NewOutPoint(coin.Hash(), coin.Index()) - l.wallet.LockOutpoint(*txout) + l.LockOutpoint(*txout) // Empty sig script, we'll actually sign if this reservation is // queued up to be completed (the other side accepts). @@ -492,7 +492,7 @@ func (l *LightningWallet) handleFundingReserveRequest(req *initFundingReserveMsg // Change is necessary. Query for an available change address to // send the remainder to. changeAmount := selectedTotalValue - req.fundingAmount - addrs, err := l.wallet.Manager.NextInternalAddresses(waddrmgr.DefaultAccountNum, 1) + addrs, err := l.Manager.NextInternalAddresses(waddrmgr.DefaultAccountNum, 1) if err != nil { req.err <- err req.resp <- nil @@ -541,7 +541,7 @@ func (l *LightningWallet) handleFundingReserveRequest(req *initFundingReserveMsg // channel close. // TODO(roasbeef): same here //deliveryAddress, err := l.wallet.NewChangeAddress(waddrmgr.DefaultAccountNum) - addrs, err := l.wallet.Manager.NextInternalAddresses(waddrmgr.DefaultAccountNum, 1) + addrs, err := l.Manager.NextInternalAddresses(waddrmgr.DefaultAccountNum, 1) if err != nil { // TODO(roasbeef): make into func sendErorr() req.err <- err @@ -595,7 +595,7 @@ func (l *LightningWallet) handleFundingCancelRequest(req *fundingReserveCancelMs // Mark all previously locked outpoints as usuable for future funding // requests. for _, unusedInput := range pendingReservation.ourContribution.Inputs { - l.wallet.UnlockOutpoint(unusedInput.PreviousOutPoint) + l.UnlockOutpoint(unusedInput.PreviousOutPoint) } // TODO(roasbeef): is it even worth it to keep track of unsed keys? @@ -691,7 +691,7 @@ func (l *LightningWallet) handleContributionMsg(req *addContributionMsg) { pendingReservation.ourFundingSigs = make([][]byte, 0, len(ourContribution.Inputs)) for i, txIn := range fundingTx.TxIn { // Does the wallet know about the txin? - txDetail, _ := l.wallet.TxStore.TxDetails(&txIn.PreviousOutPoint.Hash) + txDetail, _ := l.TxStore.TxDetails(&txIn.PreviousOutPoint.Hash) if txDetail == nil { continue } @@ -706,7 +706,7 @@ func (l *LightningWallet) handleContributionMsg(req *addContributionMsg) { return } - ai, err := l.wallet.Manager.Address(apkh) + ai, err := l.Manager.Address(apkh) if err != nil { req.err <- fmt.Errorf("cannot get address info: %v", err) return @@ -939,7 +939,7 @@ func (l *LightningWallet) getNextRawKey() (*btcec.PrivateKey, error) { l.keyGenMtx.Lock() defer l.keyGenMtx.Unlock() - nextAddr, err := l.wallet.Manager.NextExternalAddresses(waddrmgr.DefaultAccountNum, 1) + nextAddr, err := l.Manager.NextExternalAddresses(waddrmgr.DefaultAccountNum, 1) if err != nil { return nil, err } diff --git a/lnwallet/wallet_test.go b/lnwallet/wallet_test.go index 296ceb587..0262048e4 100644 --- a/lnwallet/wallet_test.go +++ b/lnwallet/wallet_test.go @@ -51,7 +51,7 @@ var ( // within the wallet are *exactly* amount. If unable to retrieve the current // balance, or the assertion fails, the test will halt with a fatal error. func assertProperBalance(t *testing.T, lw *LightningWallet, numConfirms, amount int32) { - balance, err := lw.wallet.TxStore.Balance(0, 20) + balance, err := lw.TxStore.Balance(0, 20) if err != nil { t.Fatalf("unable to query for balance: %v", err) } @@ -175,7 +175,7 @@ func newBobNode() (*bobNode, error) { // addTestTx adds an output spendable by our test wallet, marked as included in // 'block'. func addTestTx(w *LightningWallet, rec *wtxmgr.TxRecord, block *wtxmgr.BlockMeta) error { - err := w.wallet.TxStore.InsertTx(rec, block) + err := w.TxStore.InsertTx(rec, block) if err != nil { return err } @@ -190,14 +190,14 @@ func addTestTx(w *LightningWallet, rec *wtxmgr.TxRecord, block *wtxmgr.BlockMeta continue } for _, addr := range addrs { - ma, err := w.wallet.Manager.Address(addr) + ma, err := w.Manager.Address(addr) if err == nil { - err = w.wallet.TxStore.AddCredit(rec, block, uint32(i), + err = w.TxStore.AddCredit(rec, block, uint32(i), ma.Internal()) if err != nil { return err } - err = w.wallet.Manager.MarkUsed(addr) + err = w.Manager.MarkUsed(addr) if err != nil { return err } @@ -226,7 +226,7 @@ func loadTestCredits(w *LightningWallet, numOutputs, btcPerOutput int) error { // Import the priv key (converting to WIF) above that controls all our // available outputs. privKey, _ := btcec.PrivKeyFromBytes(btcec.S256(), testWalletPrivKey) - if err := w.wallet.Unlock(privPass, time.Duration(0)); err != nil { + if err := w.Unlock(privPass, time.Duration(0)); err != nil { return err } bs := &waddrmgr.BlockStamp{Hash: *genBlockHash(1), Height: 1} @@ -234,10 +234,10 @@ func loadTestCredits(w *LightningWallet, numOutputs, btcPerOutput int) error { if err != nil { return err } - if _, err := w.wallet.ImportPrivateKey(wif, bs, false); err != nil { + if _, err := w.ImportPrivateKey(wif, bs, false); err != nil { return nil } - if err := w.wallet.Manager.SetSyncedTo(&waddrmgr.BlockStamp{int32(1), *genBlockHash(1)}); err != nil { + if err := w.Manager.SetSyncedTo(&waddrmgr.BlockStamp{int32(1), *genBlockHash(1)}); err != nil { return err } @@ -273,7 +273,7 @@ func loadTestCredits(w *LightningWallet, numOutputs, btcPerOutput int) error { if err := addTestTx(w, txCredit, &blk); err != nil { return err } - if err := w.wallet.Manager.SetSyncedTo(&waddrmgr.BlockStamp{int32(2), *genBlockHash(2)}); err != nil { + if err := w.Manager.SetSyncedTo(&waddrmgr.BlockStamp{int32(2), *genBlockHash(2)}); err != nil { return err } @@ -282,7 +282,7 @@ func loadTestCredits(w *LightningWallet, numOutputs, btcPerOutput int) error { // (hard coded to 6 atm). for i := 3; i < 10; i++ { sha := *genBlockHash(i) - if err := w.wallet.Manager.SetSyncedTo(&waddrmgr.BlockStamp{int32(i), sha}); err != nil { + if err := w.Manager.SetSyncedTo(&waddrmgr.BlockStamp{int32(i), sha}); err != nil { return err } } @@ -304,7 +304,7 @@ func createTestWallet() (string, *LightningWallet, error) { return "", nil, err } // TODO(roasbeef): check error once nodetest is finished. - _ = wallet.Start() + _ = wallet.Startup() // Load our test wallet with 5 outputs each holding 4BTC. if err := loadTestCredits(wallet, 5, 4); err != nil { @@ -446,7 +446,7 @@ func testBasicWalletReservationWorkFlow(lnwallet *LightningWallet, t *testing.T) pkscript = bobNode.changeOutputs[0].PkScript } else { // Does the wallet know about the txin? - txDetail, err := lnwallet.wallet.TxStore.TxDetails(&input.PreviousOutPoint.Hash) + txDetail, err := lnwallet.TxStore.TxDetails(&input.PreviousOutPoint.Hash) if txDetail == nil || err != nil { t.Fatalf("txstore can't find tx detail, err: %v", err) } @@ -531,7 +531,7 @@ func testFundingCancellationNotEnoughFunds(lnwallet *LightningWallet, t *testing } // There should be three locked outpoints. - lockedOutPoints := lnwallet.wallet.LockedOutpoints() + lockedOutPoints := lnwallet.LockedOutpoints() if len(lockedOutPoints) != 3 { t.Fatalf("two outpoints should now be locked, instead %v are", lockedOutPoints) @@ -551,7 +551,7 @@ func testFundingCancellationNotEnoughFunds(lnwallet *LightningWallet, t *testing } // Those outpoints should no longer be locked. - lockedOutPoints = lnwallet.wallet.LockedOutpoints() + lockedOutPoints = lnwallet.LockedOutpoints() if len(lockedOutPoints) != 0 { t.Fatalf("outpoints still locked") } @@ -607,7 +607,7 @@ type testLnWallet struct { func clearWalletState(w *LightningWallet) error { w.nextFundingID = 0 w.fundingLimbo = make(map[uint64]*ChannelReservation) - w.wallet.ResetLockedOutpoints() + w.ResetLockedOutpoints() return w.ChannelDB.Wipe() } @@ -621,7 +621,7 @@ func TestLightningWallet(t *testing.T) { t.Fatalf("unable to create test ln wallet: %v", err) } defer os.RemoveAll(testDir) - defer lnwallet.Stop() + defer lnwallet.Shutdown() // The wallet should now have 20BTC available for spending. assertProperBalance(t, lnwallet, 1, 20)