forked from cerc-io/plugeth
Paranoia check
This commit is contained in:
parent
2f9bc2ab75
commit
35ae9e3aa8
@ -6,6 +6,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"github.com/ethereum/eth-go/ethcrypto"
|
"github.com/ethereum/eth-go/ethcrypto"
|
||||||
"github.com/ethereum/eth-go/ethlog"
|
"github.com/ethereum/eth-go/ethlog"
|
||||||
|
"github.com/ethereum/eth-go/ethtrie"
|
||||||
"github.com/ethereum/eth-go/ethutil"
|
"github.com/ethereum/eth-go/ethutil"
|
||||||
"github.com/ethereum/eth-go/ethwire"
|
"github.com/ethereum/eth-go/ethwire"
|
||||||
"math/big"
|
"math/big"
|
||||||
@ -204,7 +205,15 @@ func (sm *StateManager) Process(block *Block, dontReact bool) (err error) {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ethutil.Config.Paranoia {
|
||||||
|
valid, _ := ethtrie.ParanoiaCheck(state.trie)
|
||||||
|
if !valid {
|
||||||
|
err = fmt.Errorf("PARANOIA: World state trie comparison failed")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if !block.State().Cmp(state) {
|
if !block.State().Cmp(state) {
|
||||||
|
|
||||||
err = fmt.Errorf("Invalid merkle root.\nrec: %x\nis: %x", block.State().trie.Root, state.trie.Root)
|
err = fmt.Errorf("Invalid merkle root.\nrec: %x\nis: %x", block.State().trie.Root, state.trie.Root)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package ethchain
|
package ethchain
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/ethereum/eth-go/ethtrie"
|
"github.com/ethereum/eth-go/ethtrie"
|
||||||
"github.com/ethereum/eth-go/ethutil"
|
"github.com/ethereum/eth-go/ethutil"
|
||||||
@ -264,23 +263,16 @@ func Call(vm *Vm, closure *Closure, data []byte) (ret []byte, err error, deepErr
|
|||||||
ret, _, err = closure.Call(vm, data)
|
ret, _, err = closure.Call(vm, data)
|
||||||
deepErr = vm.err != nil
|
deepErr = vm.err != nil
|
||||||
|
|
||||||
Paranoia := ethutil.Config.Paranoia
|
if ethutil.Config.Paranoia {
|
||||||
if Paranoia {
|
|
||||||
var (
|
var (
|
||||||
context = closure.object
|
context = closure.object
|
||||||
trie = context.state.trie
|
trie = context.state.trie
|
||||||
trie2 = ethtrie.NewTrie(ethutil.Config.Db, "")
|
|
||||||
)
|
)
|
||||||
|
|
||||||
trie.NewIterator().Each(func(key string, v *ethutil.Value) {
|
valid, t2 := ethtrie.ParanoiaCheck(trie)
|
||||||
trie2.Update(key, v.Str())
|
if !valid {
|
||||||
})
|
|
||||||
|
|
||||||
a := ethutil.NewValue(trie2.Root).Bytes()
|
|
||||||
b := ethutil.NewValue(context.state.trie.Root).Bytes()
|
|
||||||
if bytes.Compare(a, b) != 0 {
|
|
||||||
// TODO FIXME ASAP
|
// TODO FIXME ASAP
|
||||||
context.state.trie = trie2
|
context.state.trie = t2
|
||||||
/*
|
/*
|
||||||
statelogger.Debugf("(o): %x\n", trie.Root)
|
statelogger.Debugf("(o): %x\n", trie.Root)
|
||||||
trie.NewIterator().Each(func(key string, v *ethutil.Value) {
|
trie.NewIterator().Each(func(key string, v *ethutil.Value) {
|
||||||
|
Loading…
Reference in New Issue
Block a user