github.com/decred/dcrlnd@v0.7.6/chainntnfs/dcrwnotify/dcrw.go (about) 1 package dcrwnotify 2 3 import ( 4 "context" 5 6 "decred.org/dcrwallet/v4/wallet" 7 "github.com/decred/dcrd/chaincfg/chainhash" 8 "github.com/decred/dcrd/chaincfg/v3" 9 "github.com/decred/dcrd/wire" 10 "github.com/decred/dcrlnd/blockcache" 11 "github.com/decred/dcrlnd/chainntnfs" 12 csnotify "github.com/decred/dcrlnd/chainntnfs/chainscannotify" 13 "github.com/decred/dcrlnd/chainscan/csdrivers" 14 ) 15 16 type DcrwChainSource struct { 17 *csdrivers.DcrwalletCSDriver 18 w *wallet.Wallet 19 } 20 21 func (s *DcrwChainSource) GetBlockHash(ctx context.Context, height int32) (*chainhash.Hash, error) { 22 id := wallet.NewBlockIdentifierFromHeight(height) 23 b, err := s.w.BlockInfo(ctx, id) 24 if err != nil { 25 return nil, err 26 } 27 28 return &b.Hash, err 29 } 30 31 func (s *DcrwChainSource) GetBlockHeader(ctx context.Context, hash *chainhash.Hash) (*wire.BlockHeader, error) { 32 id := wallet.NewBlockIdentifierFromHash(hash) 33 b, err := s.w.BlockInfo(ctx, id) 34 if err != nil { 35 return nil, err 36 } 37 38 var header wire.BlockHeader 39 err = header.FromBytes(b.Header) 40 if err != nil { 41 return nil, err 42 } 43 44 return &header, err 45 } 46 47 func (s *DcrwChainSource) StoresReorgedHeaders() bool { 48 return true 49 } 50 51 func NewDcrwChainSource(w *wallet.Wallet, bCache *blockcache.BlockCache) *DcrwChainSource { 52 cs := csdrivers.NewDcrwalletCSDriver(w, bCache) 53 return &DcrwChainSource{ 54 w: w, 55 DcrwalletCSDriver: cs, 56 } 57 } 58 59 var _ csnotify.ChainSource = (*DcrwChainSource)(nil) 60 61 // New returns a new DcrdNotifier instance. This function assumes the dcrd node 62 // detailed in the passed configuration is already running, and willing to 63 // accept new websockets clients. 64 func New(w *wallet.Wallet, chainParams *chaincfg.Params, 65 spendHintCache chainntnfs.SpendHintCache, 66 confirmHintCache chainntnfs.ConfirmHintCache, 67 bCache *blockcache.BlockCache) (*csnotify.ChainscanNotifier, error) { 68 69 src := NewDcrwChainSource(w, bCache) 70 return csnotify.New(src, chainParams, spendHintCache, confirmHintCache) 71 }