github.com/decred/dcrlnd@v0.7.6/lnwallet/dcrwallet/extended_wallet.go (about) 1 package dcrwallet 2 3 import ( 4 "context" 5 6 "decred.org/dcrwallet/v4/errors" 7 walleterr "decred.org/dcrwallet/v4/errors" 8 base "decred.org/dcrwallet/v4/wallet" 9 "github.com/decred/dcrd/chaincfg/chainhash" 10 "github.com/decred/dcrd/dcrec/secp256k1/v4" 11 "github.com/decred/dcrd/dcrutil/v4" 12 "github.com/decred/dcrd/txscript/v4/stdaddr" 13 "github.com/decred/dcrlnd/lnwallet" 14 ) 15 16 var _ lnwallet.ExtendedWalletController = (*DcrWallet)(nil) 17 18 func (b *DcrWallet) DeriveNextAccount(name string) error { 19 nb, err := b.wallet.NextAccount(context.Background(), name) 20 if err == nil { 21 dcrwLog.Infof("Created account %q (%d)", name, nb) 22 } 23 return err 24 } 25 26 func (b *DcrWallet) ExportPrivKey(addr stdaddr.Address) (*secp256k1.PrivateKey, error) { 27 str, err := b.wallet.DumpWIFPrivateKey(context.Background(), addr) 28 if err != nil { 29 return nil, err 30 } 31 wif, err := dcrutil.DecodeWIF(str, b.cfg.NetParams.PrivateKeyID) 32 pk := secp256k1.PrivKeyFromBytes(wif.PrivKey()) 33 return pk, err 34 } 35 36 func (b *DcrWallet) RescanWallet(startHeight int32, progress func(height int32) error) error { 37 nb, err := b.wallet.NetworkBackend() 38 if err != nil { 39 return err 40 } 41 42 // Stop rescan if we exit early. 43 ctx, cancel := context.WithCancel(b.ctx) 44 defer cancel() 45 done := make(chan struct{}) 46 47 // Start rescan. 48 p := make(chan base.RescanProgress) 49 go func() { 50 b.wallet.RescanProgressFromHeight(ctx, nb, startHeight, p) 51 close(done) 52 }() 53 54 // Progress through rescan. 55 for { 56 select { 57 case progr := <-p: 58 if progr.Err == nil && progress != nil { 59 err := progress(progr.ScannedThrough) 60 if err != nil { 61 return err 62 } 63 } 64 if progr.Err != nil { 65 return progr.Err 66 } 67 68 case <-done: 69 return nil 70 } 71 } 72 } 73 74 func (b *DcrWallet) GetWalletTransaction(txh chainhash.Hash) (*lnwallet.WalletTransaction, error) { 75 txs, confs, bh, err := b.wallet.TransactionSummary(context.Background(), &txh) 76 if errors.Is(err, walleterr.NotExist) { 77 return nil, lnwallet.ErrWalletTxNotExist 78 } 79 if err != nil { 80 return nil, err 81 } 82 83 res := &lnwallet.WalletTransaction{ 84 RawTx: txs.Transaction, 85 Confirmations: confs, 86 BlockHash: bh, 87 } 88 return res, nil 89 }