|
|
|
@ -169,22 +169,19 @@ func (in *Interpreter) Run(snapshot int, contract *Contract, input []byte) (ret |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// get the operation from the jump table matching the opcode
|
|
|
|
|
// Get the operation from the jump table matching the opcode and validate the
|
|
|
|
|
// stack and make sure there enough stack items available to perform the operation
|
|
|
|
|
operation := in.cfg.JumpTable[op] |
|
|
|
|
if err := in.enforceRestrictions(op, operation, stack); err != nil { |
|
|
|
|
return nil, err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// if the op is invalid abort the process and return an error
|
|
|
|
|
if !operation.valid { |
|
|
|
|
return nil, fmt.Errorf("invalid opcode 0x%x", int(op)) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// validate the stack and make sure there enough stack items available
|
|
|
|
|
// to perform the operation
|
|
|
|
|
if err := operation.validateStack(stack); err != nil { |
|
|
|
|
return nil, err |
|
|
|
|
} |
|
|
|
|
// If the operation is valid, enforce and write restrictions
|
|
|
|
|
if err := in.enforceRestrictions(op, operation, stack); err != nil { |
|
|
|
|
return nil, err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var memorySize uint64 |
|
|
|
|
// calculate the new memory size and expand the memory to fit
|
|
|
|
|