core: put unspents get/put one loop above in storeBlock
Everywhere in this code prevHash == input.PrevHash, thus we can easily move some common code out of the loop saving on DB accesses and serialization/deserialization.
This commit is contained in:
parent
5c9681508b
commit
36c6b6af14
1 changed files with 7 additions and 7 deletions
|
@ -436,15 +436,12 @@ func (bc *Blockchain) storeBlock(block *block.Block) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("could not find previous TX: %s", prevHash)
|
return fmt.Errorf("could not find previous TX: %s", prevHash)
|
||||||
}
|
}
|
||||||
|
unspent, err := cache.GetUnspentCoinStateOrNew(prevHash)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
for _, input := range inputs {
|
for _, input := range inputs {
|
||||||
unspent, err := cache.GetUnspentCoinStateOrNew(input.PrevHash)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
unspent.states[input.PrevIndex] = state.CoinSpent
|
unspent.states[input.PrevIndex] = state.CoinSpent
|
||||||
if err = cache.PutUnspentCoinState(input.PrevHash, unspent); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
prevTXOutput := prevTX.Outputs[input.PrevIndex]
|
prevTXOutput := prevTX.Outputs[input.PrevIndex]
|
||||||
account, err := cache.GetAccountStateOrNew(prevTXOutput.ScriptHash)
|
account, err := cache.GetAccountStateOrNew(prevTXOutput.ScriptHash)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -482,6 +479,9 @@ func (bc *Blockchain) storeBlock(block *block.Block) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if err = cache.PutUnspentCoinState(prevHash, unspent); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Process the underlying type of the TX.
|
// Process the underlying type of the TX.
|
||||||
|
|
Loading…
Add table
Reference in a new issue