Refactored VM to two separate VMs; std & debug

Standard VM should be about 10x faster than the debug VM. Some error
checking has been removed, all of the log statements and therefor quite
some unnecessary if-statements.
This commit is contained in:
obscuren
2014-10-14 11:48:52 +02:00
parent 2e894b668a
commit c5bd32b0ad
13 changed files with 1153 additions and 352 deletions

View File

@ -224,7 +224,7 @@ func (self *StateTransition) TransitionState() (err error) {
// script section for the state object.
self.data = nil
code, err := self.Eval(msg, receiver.Init(), receiver, "init")
code, err := self.Eval(msg, receiver.Init(), receiver)
if err != nil {
self.state.Set(snapshot)
@ -235,7 +235,7 @@ func (self *StateTransition) TransitionState() (err error) {
msg.Output = code
} else {
if len(receiver.Code) > 0 {
ret, err := self.Eval(msg, receiver.Code, receiver, "code")
ret, err := self.Eval(msg, receiver.Code, receiver)
if err != nil {
self.state.Set(snapshot)
@ -262,7 +262,7 @@ func (self *StateTransition) transferValue(sender, receiver *ethstate.StateObjec
return nil
}
func (self *StateTransition) Eval(msg *ethstate.Message, script []byte, context *ethstate.StateObject, typ string) (ret []byte, err error) {
func (self *StateTransition) Eval(msg *ethstate.Message, script []byte, context *ethstate.StateObject) (ret []byte, err error) {
var (
transactor = self.Sender()
state = self.state
@ -270,9 +270,7 @@ func (self *StateTransition) Eval(msg *ethstate.Message, script []byte, context
callerClosure = ethvm.NewClosure(msg, transactor, context, script, self.gas, self.gasPrice)
)
vm := ethvm.New(env)
vm.Verbose = true
vm.Fn = typ
vm := ethvm.New(env, ethvm.Type(ethutil.Config.VmType))
ret, _, err = callerClosure.Call(vm, self.tx.Data)