Fixed mem error in vm. Fixed logs tests
This commit is contained in:
@ -147,9 +147,8 @@ func (m *Memory) Get(offset, size int64) []byte {
|
||||
|
||||
func (self *Memory) Geti(offset, size int64) (cpy []byte) {
|
||||
if len(self.store) > int(offset) {
|
||||
s := int64(math.Min(float64(len(self.store)), float64(offset+size)))
|
||||
cpy = make([]byte, size)
|
||||
copy(cpy, self.store[offset:offset+s])
|
||||
copy(cpy, self.store[offset:offset+size])
|
||||
|
||||
return
|
||||
}
|
||||
|
@ -308,6 +308,11 @@ var opCodeToString = map[OpCode]string{
|
||||
SWAP14: "SWAP14",
|
||||
SWAP15: "SWAP15",
|
||||
SWAP16: "SWAP16",
|
||||
LOG0: "LOG0",
|
||||
LOG1: "LOG1",
|
||||
LOG2: "LOG2",
|
||||
LOG3: "LOG3",
|
||||
LOG4: "LOG4",
|
||||
|
||||
// 0xf0 range
|
||||
CREATE: "CREATE",
|
||||
|
@ -35,7 +35,7 @@ func NewDebugVm(env Environment) *DebugVm {
|
||||
lt = LogTyDiff
|
||||
}
|
||||
|
||||
return &DebugVm{env: env, logTy: lt, Recoverable: true}
|
||||
return &DebugVm{env: env, logTy: lt, Recoverable: false}
|
||||
}
|
||||
|
||||
func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) {
|
||||
@ -168,8 +168,10 @@ func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) {
|
||||
gas.Set(GasLog)
|
||||
addStepGasUsage(new(big.Int).Mul(big.NewInt(int64(n)), GasLog))
|
||||
|
||||
mSize, _ := stack.Peekn()
|
||||
mSize, mStart := stack.Peekn()
|
||||
addStepGasUsage(mSize)
|
||||
|
||||
newMemSize = calcMemSize(mStart, mSize)
|
||||
case EXP:
|
||||
require(2)
|
||||
|
||||
@ -755,10 +757,10 @@ func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) {
|
||||
case LOG0, LOG1, LOG2, LOG3, LOG4:
|
||||
n := int(op - LOG0)
|
||||
topics := make([][]byte, n)
|
||||
mStart, mSize := stack.Pop().Int64(), stack.Pop().Int64()
|
||||
mSize, mStart := stack.Pop().Int64(), stack.Pop().Int64()
|
||||
data := mem.Geti(mStart, mSize)
|
||||
for i := 0; i < n; i++ {
|
||||
topics[i] = stack.Pop().Bytes()
|
||||
topics[i] = ethutil.LeftPadBytes(stack.Pop().Bytes(), 32)
|
||||
}
|
||||
|
||||
log := &state.Log{closure.Address(), topics, data}
|
||||
|
Reference in New Issue
Block a user