fixed tests

This commit is contained in:
obscuren 2015-03-19 14:31:14 +01:00
parent d7ab716eea
commit cf45b939a0
4 changed files with 16 additions and 20 deletions

View File

@ -302,12 +302,17 @@ func (self *Trie) mknode(value *common.Value) Node {
case 2: case 2:
// A value node may consists of 2 bytes. // A value node may consists of 2 bytes.
if value.Get(0).Len() != 0 { if value.Get(0).Len() != 0 {
return NewShortNode(self, CompactDecode(string(value.Get(0).Bytes())), self.mknode(value.Get(1))) key := CompactDecode(string(value.Get(0).Bytes()))
if key[len(key)-1] == 16 {
return NewShortNode(self, key, &ValueNode{self, value.Get(1).Bytes()})
} else {
return NewShortNode(self, key, self.mknode(value.Get(1)))
}
} }
case 17: case 17:
if len(value.Bytes()) != 17 { if len(value.Bytes()) != 17 {
fnode := NewFullNode(self) fnode := NewFullNode(self)
for i := 0; i < l; i++ { for i := 0; i < 16; i++ {
fnode.set(byte(i), self.mknode(value.Get(i))) fnode.set(byte(i), self.mknode(value.Get(i)))
} }
return fnode return fnode

View File

@ -119,9 +119,9 @@ func toValue(val *big.Int) interface{} {
return val return val
} }
func getCode(code []byte, start, size uint64) []byte { func getData(data []byte, start, size uint64) []byte {
x := uint64(math.Min(float64(start), float64(len(code)))) x := uint64(math.Min(float64(start), float64(len(data))))
y := uint64(math.Min(float64(x+size), float64(len(code)))) y := uint64(math.Min(float64(x+size), float64(len(data))))
return common.RightPadBytes(code[x:y], int(size)) return common.RightPadBytes(data[x:y], int(size))
} }

View File

@ -65,7 +65,7 @@ func (c *Context) GetRangeValue(x, size uint64) []byte {
} }
func (c *Context) GetCode(x, size uint64) []byte { func (c *Context) GetCode(x, size uint64) []byte {
return getCode(c.Code, x, size) return getData(c.Code, x, size)
} }
func (c *Context) Return(ret []byte) []byte { func (c *Context) Return(ret []byte) []byte {

View File

@ -443,24 +443,15 @@ func (self *Vm) Run(context *Context, callData []byte) (ret []byte, err error) {
self.Printf(" => %d", l) self.Printf(" => %d", l)
case CALLDATACOPY: case CALLDATACOPY:
var ( var (
size = uint64(len(callData))
mOff = stack.pop().Uint64() mOff = stack.pop().Uint64()
cOff = stack.pop().Uint64() cOff = stack.pop().Uint64()
l = stack.pop().Uint64() l = stack.pop().Uint64()
) )
data := getData(callData, cOff, l)
if cOff > size { mem.Set(mOff, l, data)
cOff = 0
l = 0
} else if cOff+l > size {
l = 0
}
code := callData[cOff : cOff+l] self.Printf(" => [%v, %v, %v] %x", mOff, cOff, l, data)
mem.Set(mOff, l, code)
self.Printf(" => [%v, %v, %v] %x", mOff, cOff, l, callData[cOff:cOff+l])
case CODESIZE, EXTCODESIZE: case CODESIZE, EXTCODESIZE:
var code []byte var code []byte
if op == EXTCODESIZE { if op == EXTCODESIZE {
@ -487,7 +478,7 @@ func (self *Vm) Run(context *Context, callData []byte) (ret []byte, err error) {
cOff = stack.pop().Uint64() cOff = stack.pop().Uint64()
l = stack.pop().Uint64() l = stack.pop().Uint64()
) )
codeCopy := getCode(code, cOff, l) codeCopy := getData(code, cOff, l)
mem.Set(mOff, l, codeCopy) mem.Set(mOff, l, codeCopy)