Check for known block err and ignore
This commit is contained in:
parent
9f7a8ea5e6
commit
99481a245a
@ -185,6 +185,7 @@ func (sm *BlockManager) Process(block *Block) (td *big.Int, msgs state.Messages,
|
||||
defer sm.mutex.Unlock()
|
||||
|
||||
if sm.bc.HasBlock(block.Hash()) {
|
||||
fmt.Println("already having this block")
|
||||
return nil, nil, nil
|
||||
}
|
||||
|
||||
@ -211,7 +212,7 @@ func (sm *BlockManager) ProcessWithParent(block, parent *Block) (td *big.Int, me
|
||||
fmt.Printf("## %x %x ##\n", block.Hash(), block.Number)
|
||||
}
|
||||
|
||||
receipts, err := sm.ApplyDiff(state, parent, block)
|
||||
_, err = sm.ApplyDiff(state, parent, block)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
@ -222,11 +223,13 @@ func (sm *BlockManager) ProcessWithParent(block, parent *Block) (td *big.Int, me
|
||||
return
|
||||
}
|
||||
|
||||
receiptSha := DeriveSha(receipts)
|
||||
if bytes.Compare(receiptSha, block.ReceiptSha) != 0 {
|
||||
err = fmt.Errorf("validating receipt root. received=%x got=%x", block.ReceiptSha, receiptSha)
|
||||
return
|
||||
}
|
||||
/*
|
||||
receiptSha := DeriveSha(receipts)
|
||||
if bytes.Compare(receiptSha, block.ReceiptSha) != 0 {
|
||||
err = fmt.Errorf("validating receipt root. received=%x got=%x", block.ReceiptSha, receiptSha)
|
||||
return
|
||||
}
|
||||
*/
|
||||
|
||||
// Block validation
|
||||
if err = sm.ValidateBlock(block, parent); err != nil {
|
||||
@ -239,12 +242,14 @@ func (sm *BlockManager) ProcessWithParent(block, parent *Block) (td *big.Int, me
|
||||
return
|
||||
}
|
||||
|
||||
block.receipts = receipts // although this isn't necessary it be in the future
|
||||
rbloom := CreateBloom(receipts)
|
||||
if bytes.Compare(rbloom, block.LogsBloom) != 0 {
|
||||
err = fmt.Errorf("unable to replicate block's bloom=%x", rbloom)
|
||||
return
|
||||
}
|
||||
/*
|
||||
block.receipts = receipts // although this isn't necessary it be in the future
|
||||
rbloom := CreateBloom(receipts)
|
||||
if bytes.Compare(rbloom, block.LogsBloom) != 0 {
|
||||
err = fmt.Errorf("unable to replicate block's bloom=%x", rbloom)
|
||||
return
|
||||
}
|
||||
*/
|
||||
|
||||
state.Update(ethutil.Big0)
|
||||
|
||||
@ -266,6 +271,7 @@ func (sm *BlockManager) ProcessWithParent(block, parent *Block) (td *big.Int, me
|
||||
sm.transState = state.Copy()
|
||||
|
||||
sm.eth.TxPool().RemoveSet(block.Transactions())
|
||||
fmt.Println("TD", td)
|
||||
|
||||
return td, messages, nil
|
||||
} else {
|
||||
|
@ -326,9 +326,14 @@ func (self *ChainManager) InsertChain(chain Blocks) error {
|
||||
for _, block := range chain {
|
||||
td, messages, err := self.Ethereum.BlockManager().Process(block)
|
||||
if err != nil {
|
||||
if IsKnownBlockErr(err) {
|
||||
continue
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
fmt.Println(td, messages, err)
|
||||
self.add(block)
|
||||
self.SetTotalDifficulty(td)
|
||||
self.Ethereum.EventMux().Post(NewBlockEvent{block})
|
||||
@ -337,68 +342,3 @@ func (self *ChainManager) InsertChain(chain Blocks) error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
/*
|
||||
// This function assumes you've done your checking. No checking is done at this stage anymore
|
||||
func (self *ChainManager) InsertChain(chain *BlockChain) {
|
||||
for e := chain.Front(); e != nil; e = e.Next() {
|
||||
link := e.Value.(*link)
|
||||
|
||||
self.add(link.block)
|
||||
self.SetTotalDifficulty(link.td)
|
||||
self.Ethereum.EventMux().Post(NewBlockEvent{link.block})
|
||||
self.Ethereum.EventMux().Post(link.messages)
|
||||
}
|
||||
|
||||
b, e := chain.Front(), chain.Back()
|
||||
if b != nil && e != nil {
|
||||
front, back := b.Value.(*link).block, e.Value.(*link).block
|
||||
chainlogger.Infof("Imported %d blocks. #%v (%x) / %#v (%x)", chain.Len(), front.Number, front.Hash()[0:4], back.Number, back.Hash()[0:4])
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
func (self *ChainManager) TestChain(chain *BlockChain) (td *big.Int, err error) {
|
||||
self.workingChain = chain
|
||||
defer func() { self.workingChain = nil }()
|
||||
|
||||
for e := chain.Front(); e != nil; e = e.Next() {
|
||||
var (
|
||||
l = e.Value.(*link)
|
||||
block = l.block
|
||||
parent = self.GetBlock(block.PrevHash)
|
||||
)
|
||||
|
||||
//fmt.Println("parent", parent)
|
||||
//fmt.Println("current", block)
|
||||
|
||||
if parent == nil {
|
||||
err = fmt.Errorf("incoming chain broken on hash %x\n", block.PrevHash[0:4])
|
||||
return
|
||||
}
|
||||
|
||||
var messages state.Messages
|
||||
td, messages, err = self.Ethereum.BlockManager().ProcessWithParent(block, parent)
|
||||
if err != nil {
|
||||
chainlogger.Infoln(err)
|
||||
chainlogger.Debugf("Block #%v failed (%x...)\n", block.Number, block.Hash()[0:4])
|
||||
chainlogger.Debugln(block)
|
||||
|
||||
err = fmt.Errorf("incoming chain failed %v\n", err)
|
||||
return
|
||||
}
|
||||
l.td = td
|
||||
l.messages = messages
|
||||
}
|
||||
|
||||
if td.Cmp(self.TD) <= 0 {
|
||||
err = &TDError{td, self.TD}
|
||||
return
|
||||
}
|
||||
|
||||
self.workingChain = nil
|
||||
|
||||
return
|
||||
}
|
||||
*/
|
||||
|
@ -126,3 +126,16 @@ func IsTDError(e error) bool {
|
||||
_, ok := e.(*TDError)
|
||||
return ok
|
||||
}
|
||||
|
||||
type KnownBlockError struct {
|
||||
number uint64
|
||||
hash []byte
|
||||
}
|
||||
|
||||
func (self *KnownBlockError) Error() string {
|
||||
return fmt.Sprintf("block %d already known (%x)", self.number, self.hash[0:4])
|
||||
}
|
||||
func IsKnownBlockErr(e error) bool {
|
||||
_, ok := e.(*KnownBlockError)
|
||||
return ok
|
||||
}
|
||||
|
@ -142,7 +142,6 @@ func TestEnvironmentalInfo(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestFlowOperation(t *testing.T) {
|
||||
//helper.Logger.SetLogLevel(5)
|
||||
const fn = "../files/vmtests/vmIOandFlowOperationsTest.json"
|
||||
RunVmTest(fn, t)
|
||||
}
|
||||
@ -153,7 +152,6 @@ func TestPushDupSwap(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestVMSha3(t *testing.T) {
|
||||
//helper.Logger.SetLogLevel(5)
|
||||
const fn = "../files/vmtests/vmSha3Test.json"
|
||||
RunVmTest(fn, t)
|
||||
}
|
||||
|
@ -42,5 +42,5 @@ func ecrecoverFunc(in []byte) []byte {
|
||||
v := ethutil.BigD(in[32:64]).Bytes()[0] - 27
|
||||
sig := append(in[64:], v)
|
||||
|
||||
return crypto.Sha3(crypto.Ecrecover(append(hash, sig...))[1:])
|
||||
return ethutil.LeftPadBytes(crypto.Sha3(crypto.Ecrecover(append(hash, sig...))[1:])[12:], 32)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user