wip
This commit is contained in:
parent
5a86892ecb
commit
8ddd4c4c52
@ -3,6 +3,7 @@ package ethchain
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"container/list"
|
"container/list"
|
||||||
|
"fmt"
|
||||||
"github.com/ethereum/eth-go/ethlog"
|
"github.com/ethereum/eth-go/ethlog"
|
||||||
"github.com/ethereum/eth-go/ethutil"
|
"github.com/ethereum/eth-go/ethutil"
|
||||||
"github.com/ethereum/eth-go/ethwire"
|
"github.com/ethereum/eth-go/ethwire"
|
||||||
@ -200,7 +201,7 @@ func (sm *StateManager) Process(block *Block, dontReact bool) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !block.State().Cmp(state) {
|
if !block.State().Cmp(state) {
|
||||||
statelogger.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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,7 +48,10 @@ func MakeContract(tx *Transaction, state *State) *StateObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func NewStateObject(addr []byte) *StateObject {
|
func NewStateObject(addr []byte) *StateObject {
|
||||||
return &StateObject{address: addr, Amount: new(big.Int), gasPool: new(big.Int)}
|
object := &StateObject{address: addr, Amount: new(big.Int), gasPool: new(big.Int)}
|
||||||
|
object.state = NewState(ethutil.NewTrie(ethutil.Config.Db, ""))
|
||||||
|
|
||||||
|
return object
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewContract(address []byte, Amount *big.Int, root []byte) *StateObject {
|
func NewContract(address []byte, Amount *big.Int, root []byte) *StateObject {
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
package ethchain
|
package ethchain
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/ethereum/eth-go/ethutil"
|
||||||
"math/big"
|
"math/big"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -236,6 +238,8 @@ func (self *StateTransition) transferValue(sender, receiver *StateObject) error
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var testAddr = ethutil.FromHex("ec4f34c97e43fbb2816cfd95e388353c7181dab1")
|
||||||
|
|
||||||
func (self *StateTransition) Eval(script []byte, context *StateObject) (ret []byte, err error, deepErr bool) {
|
func (self *StateTransition) Eval(script []byte, context *StateObject) (ret []byte, err error, deepErr bool) {
|
||||||
var (
|
var (
|
||||||
block = self.block
|
block = self.block
|
||||||
@ -258,5 +262,46 @@ func (self *StateTransition) Eval(script []byte, context *StateObject) (ret []by
|
|||||||
ret, _, err = closure.Call(vm, self.data, nil)
|
ret, _, err = closure.Call(vm, self.data, nil)
|
||||||
deepErr = vm.err != nil
|
deepErr = vm.err != nil
|
||||||
|
|
||||||
|
/*
|
||||||
|
if bytes.Compare(testAddr, context.Address()) == 0 {
|
||||||
|
trie := context.state.trie
|
||||||
|
trie.NewIterator().Each(func(key string, v *ethutil.Value) {
|
||||||
|
v.Decode()
|
||||||
|
fmt.Printf("%x : %x\n", key, v.Str())
|
||||||
|
})
|
||||||
|
fmt.Println("\n\n")
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
Paranoia := true
|
||||||
|
if Paranoia {
|
||||||
|
var (
|
||||||
|
trie = context.state.trie
|
||||||
|
trie2 = ethutil.NewTrie(ethutil.Config.Db, "")
|
||||||
|
)
|
||||||
|
|
||||||
|
trie.NewIterator().Each(func(key string, v *ethutil.Value) {
|
||||||
|
trie2.Update(key, v.Str())
|
||||||
|
})
|
||||||
|
|
||||||
|
a := ethutil.NewValue(trie2.Root).Bytes()
|
||||||
|
b := ethutil.NewValue(context.state.trie.Root).Bytes()
|
||||||
|
if bytes.Compare(a, b) != 0 {
|
||||||
|
fmt.Printf("original: %x\n", trie.Root)
|
||||||
|
trie.NewIterator().Each(func(key string, v *ethutil.Value) {
|
||||||
|
v.Decode()
|
||||||
|
fmt.Printf("%x : %x\n", key, v.Str())
|
||||||
|
})
|
||||||
|
|
||||||
|
fmt.Printf("new: %x\n", trie2.Root)
|
||||||
|
trie2.NewIterator().Each(func(key string, v *ethutil.Value) {
|
||||||
|
v.Decode()
|
||||||
|
fmt.Printf("%x : %x\n", key, v.Str())
|
||||||
|
})
|
||||||
|
|
||||||
|
return nil, fmt.Errorf("PARANOIA: Different state object roots during copy"), false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -116,6 +116,8 @@ func (val *Value) Bytes() []byte {
|
|||||||
return a
|
return a
|
||||||
} else if s, ok := val.Val.(byte); ok {
|
} else if s, ok := val.Val.(byte); ok {
|
||||||
return []byte{s}
|
return []byte{s}
|
||||||
|
} else if s, ok := val.Val.(string); ok {
|
||||||
|
return []byte(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
return []byte{}
|
return []byte{}
|
||||||
@ -196,6 +198,12 @@ func (val *Value) Encode() []byte {
|
|||||||
return Encode(val.Val)
|
return Encode(val.Val)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Assume that the data we have is encoded
|
||||||
|
func (self *Value) Decode() {
|
||||||
|
v, _ := Decode(self.Bytes(), 0)
|
||||||
|
self.Val = v
|
||||||
|
}
|
||||||
|
|
||||||
func NewValueFromBytes(data []byte) *Value {
|
func NewValueFromBytes(data []byte) *Value {
|
||||||
if len(data) != 0 {
|
if len(data) != 0 {
|
||||||
data, _ := Decode(data, 0)
|
data, _ := Decode(data, 0)
|
||||||
|
Loading…
Reference in New Issue
Block a user