Golang implemented sidechain for Bytom
修订版 | 760aee0c589daba8b70641a93d9dac86e4e9edfd (tree) |
---|---|
时间 | 2019-12-24 21:28:45 |
作者 | shenao78 <shenao.78@163....> |
Commiter | shenao78 |
Merge branch 'opt_mov_validate_match_tx' of https://github.com/Bytom/vapor into opt_mov_validate_match_tx
@@ -331,14 +331,18 @@ func (s *Store) SaveChainStatus(blockHeader, irrBlockHeader *types.BlockHeader, | ||
331 | 331 | return err |
332 | 332 | } |
333 | 333 | |
334 | - for _, result := range consensusResults { | |
334 | + var clearCacheFuncs []func() | |
335 | + for _, consensusResult := range consensusResults { | |
336 | + result := consensusResult | |
335 | 337 | bytes, err := json.Marshal(result) |
336 | 338 | if err != nil { |
337 | 339 | return err |
338 | 340 | } |
339 | 341 | |
340 | 342 | batch.Set(calcConsensusResultKey(result.Seq), bytes) |
341 | - s.cache.removeConsensusResult(result) | |
343 | + clearCacheFuncs = append(clearCacheFuncs, func() { | |
344 | + s.cache.removeConsensusResult(result) | |
345 | + }) | |
342 | 346 | } |
343 | 347 | |
344 | 348 | blockHash := blockHeader.Hash() |
@@ -355,7 +359,8 @@ func (s *Store) SaveChainStatus(blockHeader, irrBlockHeader *types.BlockHeader, | ||
355 | 359 | batch.Set([]byte{blockStore}, bytes) |
356 | 360 | |
357 | 361 | // save main chain blockHeaders |
358 | - for _, bh := range mainBlockHeaders { | |
362 | + for _, blockHeader := range mainBlockHeaders { | |
363 | + bh := blockHeader | |
359 | 364 | blockHash := bh.Hash() |
360 | 365 | binaryBlockHash, err := blockHash.MarshalText() |
361 | 366 | if err != nil { |
@@ -363,15 +368,24 @@ func (s *Store) SaveChainStatus(blockHeader, irrBlockHeader *types.BlockHeader, | ||
363 | 368 | } |
364 | 369 | |
365 | 370 | batch.Set(calcMainChainIndexPrefix(bh.Height), binaryBlockHash) |
366 | - s.cache.removeMainChainHash(bh.Height) | |
371 | + clearCacheFuncs = append(clearCacheFuncs, func() { | |
372 | + s.cache.removeMainChainHash(bh.Height) | |
373 | + }) | |
367 | 374 | } |
368 | 375 | |
369 | 376 | if currentStatus != nil { |
370 | 377 | for i := blockHeader.Height + 1; i <= currentStatus.Height; i++ { |
371 | - batch.Delete(calcMainChainIndexPrefix(i)) | |
372 | - s.cache.removeMainChainHash(i) | |
378 | + index := i | |
379 | + batch.Delete(calcMainChainIndexPrefix(index)) | |
380 | + clearCacheFuncs = append(clearCacheFuncs, func() { | |
381 | + s.cache.removeMainChainHash(index) | |
382 | + }) | |
373 | 383 | } |
374 | 384 | } |
375 | 385 | batch.Write() |
386 | + | |
387 | + for _, clearCacheFunc := range clearCacheFuncs { | |
388 | + clearCacheFunc() | |
389 | + } | |
376 | 390 | return nil |
377 | 391 | } |