From 7c71876c122e22681de0a81de8dac5d1fe27b875 Mon Sep 17 00:00:00 2001 From: Martin Boehm Date: Sat, 3 Feb 2018 19:14:27 +0100 Subject: [PATCH] Lookup input transactions in mempool --- blockbook.go | 4 ++-- db/rocksdb.go | 6 +++--- server/https.go | 10 ++++++++-- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/blockbook.go b/blockbook.go index 18a39885..ec1e8ad9 100644 --- a/blockbook.go +++ b/blockbook.go @@ -274,8 +274,8 @@ func waitForSignalAndShutdown(s *server.HTTPServer, mq *bchain.MQ, timeout time. } } -func printResult(txid string) error { - glog.Info(txid) +func printResult(txid string, vout uint32, isOutput bool) error { + glog.Info(txid, vout, isOutput) return nil } diff --git a/db/rocksdb.go b/db/rocksdb.go index 446697ae..8a8d9f75 100644 --- a/db/rocksdb.go +++ b/db/rocksdb.go @@ -85,7 +85,7 @@ func (d *RocksDB) Close() error { // GetTransactions finds all input/output transactions for address specified by outputScript. // Transaction are passed to callback function. -func (d *RocksDB) GetTransactions(outputScript []byte, lower uint32, higher uint32, fn func(txid string) error) (err error) { +func (d *RocksDB) GetTransactions(outputScript []byte, lower uint32, higher uint32, fn func(txid string, vout uint32, isOutput bool) error) (err error) { if glog.V(1) { glog.Infof("rocksdb: address get %s %d-%d ", unpackOutputScript(outputScript), lower, higher) } @@ -116,7 +116,7 @@ func (d *RocksDB) GetTransactions(outputScript []byte, lower uint32, higher uint glog.Infof("rocksdb: output %s: %s", hex.EncodeToString(key), hex.EncodeToString(val)) } for _, o := range outpoints { - if err := fn(o.txid); err != nil { + if err := fn(o.txid, o.vout, true); err != nil { return err } boutpoint, err := packOutpoint(o.txid, o.vout) @@ -136,7 +136,7 @@ func (d *RocksDB) GetTransactions(outputScript []byte, lower uint32, higher uint return err } for _, i := range inpoints { - if err := fn(i.txid); err != nil { + if err := fn(i.txid, i.vout, false); err != nil { return err } } diff --git a/server/https.go b/server/https.go index f58ada62..c1594636 100644 --- a/server/https.go +++ b/server/https.go @@ -168,7 +168,7 @@ func (s *HTTPServer) confirmedTransactions(w http.ResponseWriter, r *http.Reques respondError(w, err, fmt.Sprint("confirmedTransactions for address", address)) } txList := transactionList{} - err = s.db.GetTransactions(script, lower, higher, func(txid string) error { + err = s.db.GetTransactions(script, lower, higher, func(txid string, vout uint32, isOutput bool) error { txList.Txid = append(txList.Txid, txid) return nil }) @@ -184,8 +184,14 @@ func (s *HTTPServer) transactions(w http.ResponseWriter, r *http.Request) { respondError(w, err, fmt.Sprint("transactions for address", address)) } txList := transactionList{} - err = s.db.GetTransactions(script, lower, higher, func(txid string) error { + err = s.db.GetTransactions(script, lower, higher, func(txid string, vout uint32, isOutput bool) error { txList.Txid = append(txList.Txid, txid) + if isOutput { + input := s.mempool.GetInput(txid, vout) + if input != "" { + txList.Txid = append(txList.Txid, txid) + } + } return nil }) if err != nil {