aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2015-04-30 19:41:47 +0800
committerobscuren <geffobscura@gmail.com>2015-04-30 19:50:59 +0800
commit28b39267d990352883df1c093fd6c36cd532cfdf (patch)
tree251391a951ff57dac98a36f0b9ae0f0502dbdfda /core
parent9b6e8f6195da1d52ba35295d9d8a3a9f24ec30b0 (diff)
downloadgo-tangerine-28b39267d990352883df1c093fd6c36cd532cfdf.tar.gz
go-tangerine-28b39267d990352883df1c093fd6c36cd532cfdf.tar.zst
go-tangerine-28b39267d990352883df1c093fd6c36cd532cfdf.zip
core, eth: verify td of received blocks
Diffstat (limited to 'core')
-rw-r--r--core/chain_manager.go6
1 files changed, 4 insertions, 2 deletions
diff --git a/core/chain_manager.go b/core/chain_manager.go
index 4fdb2edce..e97ed307c 100644
--- a/core/chain_manager.go
+++ b/core/chain_manager.go
@@ -511,6 +511,10 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) {
if block == nil {
continue
}
+ // Setting block.Td regardless of error (known for example) prevents errors down the line
+ // in the protocol handler
+ block.Td = new(big.Int).Set(CalculateTD(block, self.GetBlock(block.ParentHash())))
+
// Call in to the block processor and check for errors. It's likely that if one block fails
// all others will fail too (unless a known block is returned).
logs, err := self.processor.Process(block)
@@ -545,8 +549,6 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) {
return i, err
}
- block.Td = new(big.Int).Set(CalculateTD(block, self.GetBlock(block.ParentHash())))
-
self.mu.Lock()
{
cblock := self.currentBlock