Browse Source

changed to unsigned integers

obscuren 11 years ago
parent
commit
186948da22
3 changed files with 32 additions and 20 deletions
  1. 19 7
      tests/vm/gh_test.go
  2. 2 2
      vm/stack.go
  3. 11 11
      vm/vm_debug.go

+ 19 - 7
tests/vm/gh_test.go

@@ -20,9 +20,21 @@ type Account struct {
 }
 
 type Log struct {
-	Address string
-	Data    string
-	Topics  []string
+	AddressF string   `json:"address"`
+	DataF    string   `json:"data"`
+	TopicsF  []string `json:"topics"`
+	BloomF   string   `json:"bloom"`
+}
+
+func (self Log) Address() []byte      { return ethutil.Hex2Bytes(self.AddressF) }
+func (self Log) Data() []byte         { return ethutil.Hex2Bytes(self.DataF) }
+func (self Log) RlpData() interface{} { return nil }
+func (self Log) Topics() [][]byte {
+	t := make([][]byte, len(self.TopicsF))
+	for i, topic := range self.TopicsF {
+		t[i] = ethutil.Hex2Bytes(topic)
+	}
+	return t
 }
 
 func StateObjectFromAccount(addr string, account Account) *state.StateObject {
@@ -53,7 +65,7 @@ type VmTest struct {
 	Env         Env
 	Exec        map[string]string
 	Transaction map[string]string
-	Logs        map[string]Log
+	Logs        []Log
 	Gas         string
 	Out         string
 	Post        map[string]Account
@@ -128,10 +140,10 @@ func RunVmTest(p string, t *testing.T) {
 		}
 
 		if len(test.Logs) > 0 {
-			genBloom := ethutil.LeftPadBytes(types.LogsBloom(logs).Bytes(), 64)
 			// Logs within the test itself aren't correct, missing empty fields (32 0s)
-			for bloom /*logs*/, _ := range test.Logs {
-				if !bytes.Equal(genBloom, ethutil.Hex2Bytes(bloom)) {
+			for i, log := range test.Logs {
+				genBloom := ethutil.LeftPadBytes(types.LogsBloom(state.Logs{logs[i]}).Bytes(), 64)
+				if !bytes.Equal(genBloom, ethutil.Hex2Bytes(log.BloomF)) {
 					t.Errorf("bloom mismatch")
 				}
 			}

+ 2 - 2
vm/stack.go

@@ -111,10 +111,10 @@ func NewMemory() *Memory {
 	return &Memory{nil}
 }
 
-func (m *Memory) Set(offset, size int64, value []byte) {
+func (m *Memory) Set(offset, size uint64, value []byte) {
 	if len(value) > 0 {
 		totSize := offset + size
-		lenSize := int64(len(m.store) - 1)
+		lenSize := uint64(len(m.store) - 1)
 		if totSize > lenSize {
 			// Calculate the diff between the sizes
 			diff := totSize - lenSize

+ 11 - 11
vm/vm_debug.go

@@ -98,7 +98,7 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price *
 			} else {
 				nop := OpCode(closure.GetOp(p))
 				if !(nop == JUMPDEST || destinations[from] != nil) {
-					panic(fmt.Sprintf("JUMP missed JUMPDEST (%v) %v", nop, p))
+					panic(fmt.Sprintf("invalid jump destination (%v) %v", nop, p))
 				} else if nop == JUMP || nop == JUMPI {
 					panic(fmt.Sprintf("not allowed to JUMP(I) in to JUMP"))
 				}
@@ -611,10 +611,10 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price *
 			self.Printf(" => %d", l)
 		case CALLDATACOPY:
 			var (
-				size = int64(len(callData))
-				mOff = stack.Pop().Int64()
-				cOff = stack.Pop().Int64()
-				l    = stack.Pop().Int64()
+				size = uint64(len(callData))
+				mOff = stack.Pop().Uint64()
+				cOff = stack.Pop().Uint64()
+				l    = stack.Pop().Uint64()
 			)
 
 			if cOff > size {
@@ -654,10 +654,10 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price *
 			}
 
 			var (
-				size = int64(len(code))
-				mOff = stack.Pop().Int64()
-				cOff = stack.Pop().Int64()
-				l    = stack.Pop().Int64()
+				size = uint64(len(code))
+				mOff = stack.Pop().Uint64()
+				cOff = stack.Pop().Uint64()
+				l    = stack.Pop().Uint64()
 			)
 
 			if cOff > size {
@@ -760,7 +760,7 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price *
 		case MSTORE: // Store the value at stack top-1 in to memory at location stack top
 			// Pop value of the stack
 			val, mStart := stack.Popn()
-			mem.Set(mStart.Int64(), 32, ethutil.BigToBytes(val, 256))
+			mem.Set(mStart.Uint64(), 32, ethutil.BigToBytes(val, 256))
 
 			self.Printf(" => 0x%x", val)
 		case MSTORE8:
@@ -883,7 +883,7 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price *
 				stack.Push(ethutil.BigTrue)
 				msg.Output = ret
 
-				mem.Set(retOffset.Int64(), retSize.Int64(), ret)
+				mem.Set(retOffset.Uint64(), retSize.Uint64(), ret)
 			}
 			self.Printf("resume %x", closure.Address())