Optimize InsertBlock with cached tx hashes.
This commit optimizes InsertBlock slightly by using the cached transaction hashes instead of recomputing them. Also, while here, use the ShaHash.IsEqual function to do comparisons for consistency. This is ongoing work towards conformal/btcd#25. ok @drahn.
This commit is contained in:
parent
998682ec83
commit
19880b177e
1 changed files with 9 additions and 10 deletions
|
@ -289,11 +289,11 @@ func (db *LevelDb) DropAfterBlockBySha(sha *btcwire.ShaHash) (rerr error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// rather than iterate the list of tx backward, do it twice.
|
// rather than iterate the list of tx backward, do it twice.
|
||||||
for _, tx := range blk.MsgBlock().Transactions {
|
txShas, _ := blk.TxShas()
|
||||||
txSha, _ := tx.TxSha()
|
for _, txSha := range txShas {
|
||||||
var txUo txUpdateObj
|
var txUo txUpdateObj
|
||||||
txUo.delete = true
|
txUo.delete = true
|
||||||
db.txUpdateMap[txSha] = &txUo
|
db.txUpdateMap[*txSha] = &txUo
|
||||||
}
|
}
|
||||||
db.lBatch().Delete(shaBlkToKey(blksha))
|
db.lBatch().Delete(shaBlkToKey(blksha))
|
||||||
db.lBatch().Delete(int64ToKey(height))
|
db.lBatch().Delete(int64ToKey(height))
|
||||||
|
@ -347,8 +347,7 @@ func (db *LevelDb) InsertBlock(block *btcutil.Block) (height int64, rerr error)
|
||||||
// miners, the sha of the transaction exists in a previous block,
|
// miners, the sha of the transaction exists in a previous block,
|
||||||
// detect this condition and 'accept' the block.
|
// detect this condition and 'accept' the block.
|
||||||
for txidx, tx := range mblock.Transactions {
|
for txidx, tx := range mblock.Transactions {
|
||||||
var txsha btcwire.ShaHash
|
txsha, err := block.TxSha(txidx)
|
||||||
txsha, err = tx.TxSha()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warnf("failed to compute tx name block %v idx %v err %v", blocksha, txidx, err)
|
log.Warnf("failed to compute tx name block %v idx %v err %v", blocksha, txidx, err)
|
||||||
return 0, err
|
return 0, err
|
||||||
|
@ -362,7 +361,7 @@ func (db *LevelDb) InsertBlock(block *btcutil.Block) (height int64, rerr error)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic("invalid sha string in source")
|
panic("invalid sha string in source")
|
||||||
}
|
}
|
||||||
if txsha == *dupsha {
|
if txsha.IsEqual(dupsha) {
|
||||||
//log.Tracef("skipping sha %v %v", dupsha, newheight)
|
//log.Tracef("skipping sha %v %v", dupsha, newheight)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
@ -372,7 +371,7 @@ func (db *LevelDb) InsertBlock(block *btcutil.Block) (height int64, rerr error)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic("invalid sha string in source")
|
panic("invalid sha string in source")
|
||||||
}
|
}
|
||||||
if txsha == *dupsha {
|
if txsha.IsEqual(dupsha) {
|
||||||
//log.Tracef("skipping sha %v %v", dupsha, newheight)
|
//log.Tracef("skipping sha %v %v", dupsha, newheight)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
@ -385,15 +384,15 @@ func (db *LevelDb) InsertBlock(block *btcutil.Block) (height int64, rerr error)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
err = db.insertTx(&txsha, newheight, txloc[txidx].TxStart, txloc[txidx].TxLen, spentbuf)
|
err = db.insertTx(txsha, newheight, txloc[txidx].TxStart, txloc[txidx].TxLen, spentbuf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warnf("block %v idx %v failed to insert tx %v %v err %v", blocksha, newheight, &txsha, txidx, err)
|
log.Warnf("block %v idx %v failed to insert tx %v %v err %v", blocksha, newheight, txsha, txidx, err)
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
err = db.doSpend(tx)
|
err = db.doSpend(tx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warnf("block %v idx %v failed to spend tx %v %v err %v", blocksha, newheight, &txsha, txidx, err)
|
log.Warnf("block %v idx %v failed to spend tx %v %v err %v", blocksha, newheight, txsha, txidx, err)
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue