RocksDB.GetTransactions returns transactions from inputs
This commit is contained in:
parent
9afa5b4187
commit
2dd0b9fc21
@ -85,7 +85,7 @@ func (d *RocksDB) Close() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (d *RocksDB) GetTransactions(address string, lower uint32, higher uint32, fn func(txid string) error) (err error) {
|
func (d *RocksDB) GetTransactions(address string, lower uint32, higher uint32, fn func(txid string) error) (err error) {
|
||||||
log.Printf("rocksdb: address get %d:%d %s", lower, higher, address)
|
log.Printf("rocksdb: address get %s %d-%d ", address, lower, higher)
|
||||||
|
|
||||||
kstart, err := packOutputKey(address, lower)
|
kstart, err := packOutputKey(address, lower)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -100,19 +100,40 @@ func (d *RocksDB) GetTransactions(address string, lower uint32, higher uint32, f
|
|||||||
defer it.Close()
|
defer it.Close()
|
||||||
|
|
||||||
for it.Seek(kstart); it.Valid(); it.Next() {
|
for it.Seek(kstart); it.Valid(); it.Next() {
|
||||||
key := it.Key()
|
key := it.Key().Data()
|
||||||
val := it.Value()
|
val := it.Value().Data()
|
||||||
if bytes.Compare(key.Data(), kstop) > 0 {
|
if bytes.Compare(key, kstop) > 0 {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
outpoints, err := unpackOutputValue(val.Data())
|
outpoints, err := unpackOutputValue(val)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
log.Printf("rocksdb: output %s: %s", hex.EncodeToString(key), hex.EncodeToString(val))
|
||||||
for _, o := range outpoints {
|
for _, o := range outpoints {
|
||||||
if err := fn(o.txid); err != nil {
|
if err := fn(o.txid); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
boutpoint, err := packOutpoint(o.txid, o.vout)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
input, err := d.getInput(boutpoint)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if input != nil {
|
||||||
|
log.Printf("rocksdb: input %s: %s", hex.EncodeToString(boutpoint), hex.EncodeToString(input))
|
||||||
|
inpoints, err := unpackOutputValue(input)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, i := range inpoints {
|
||||||
|
if err := fn(i.txid); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@ -300,7 +321,7 @@ func (d *RocksDB) GetBestBlock() (uint32, string, error) {
|
|||||||
if it.SeekToLast(); it.Valid() {
|
if it.SeekToLast(); it.Valid() {
|
||||||
bestHeight := unpackUint(it.Key().Data())
|
bestHeight := unpackUint(it.Key().Data())
|
||||||
val, err := unpackBlockValue(it.Value().Data())
|
val, err := unpackBlockValue(it.Value().Data())
|
||||||
log.Printf("Bestblock: %d %s", bestHeight, val)
|
log.Printf("rocksdb: bestblock %d %s", bestHeight, val)
|
||||||
return bestHeight, val, err
|
return bestHeight, val, err
|
||||||
}
|
}
|
||||||
return 0, "", nil
|
return 0, "", nil
|
||||||
@ -317,6 +338,15 @@ func (d *RocksDB) GetBlockHash(height uint32) (string, error) {
|
|||||||
return unpackBlockValue(val.Data())
|
return unpackBlockValue(val.Data())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *RocksDB) getInput(key []byte) ([]byte, error) {
|
||||||
|
val, err := d.db.GetCF(d.ro, d.cfh[cfInputs], key)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer val.Free()
|
||||||
|
return val.Data(), nil
|
||||||
|
}
|
||||||
|
|
||||||
func (d *RocksDB) writeHeight(
|
func (d *RocksDB) writeHeight(
|
||||||
wb *gorocksdb.WriteBatch,
|
wb *gorocksdb.WriteBatch,
|
||||||
block *bitcoin.Block,
|
block *bitcoin.Block,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user