Commit 20ee1ae6 authored by obscuren's avatar obscuren

Refactored CALLDATALOAD to use big int

* Added BigMin
parent eab0b2a9
...@@ -503,13 +503,17 @@ func (vm *Vm) RunClosure(closure *Closure) (ret []byte, err error) { ...@@ -503,13 +503,17 @@ func (vm *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
vm.Printf(" => %v", vm.vars.Value) vm.Printf(" => %v", vm.vars.Value)
case CALLDATALOAD: case CALLDATALOAD:
require(1) require(1)
offset := stack.Pop().Int64() var (
offset = stack.Pop()
data = make([]byte, 32)
lenData = big.NewInt(int64(len(closure.Args)))
)
data := make([]byte, 32) if lenData.Cmp(offset) >= 0 {
if big.NewInt(int64(len(closure.Args))).Cmp(big.NewInt(offset)) >= 0 { length := new(big.Int).Add(offset, ethutil.Big32)
l := int64(math.Min(float64(offset+32), float64(len(closure.Args)))) length = ethutil.BigMin(length, lenData)
copy(data, closure.Args[offset:l]) copy(data, closure.Args[offset.Int64():length.Int64()])
} }
vm.Printf(" => 0x%x", data) vm.Printf(" => 0x%x", data)
......
...@@ -4,14 +4,6 @@ import ( ...@@ -4,14 +4,6 @@ import (
"math/big" "math/big"
) )
var BigInt0 *big.Int = big.NewInt(0)
// True
var BigTrue *big.Int = big.NewInt(1)
// False
var BigFalse *big.Int = big.NewInt(0)
// Big pow // Big pow
// //
// Returns the power of two big integers // Returns the power of two big integers
...@@ -73,3 +65,14 @@ func BigMax(x, y *big.Int) *big.Int { ...@@ -73,3 +65,14 @@ func BigMax(x, y *big.Int) *big.Int {
return x return x
} }
// Big min
//
// Returns the minimum size big integer
func BigMin(x, y *big.Int) *big.Int {
if x.Cmp(y) >= 0 {
return y
}
return x
}
...@@ -58,9 +58,11 @@ func CurrencyToString(num *big.Int) string { ...@@ -58,9 +58,11 @@ func CurrencyToString(num *big.Int) string {
// Common big integers often used // Common big integers often used
var ( var (
Big1 = big.NewInt(1) Big1 = big.NewInt(1)
Big2 = big.NewInt(2) Big2 = big.NewInt(2)
Big0 = big.NewInt(0) Big0 = big.NewInt(0)
Big32 = big.NewInt(32) BigTrue = Big1
Big256 = big.NewInt(0xff) BigFalse = Big0
Big32 = big.NewInt(32)
Big256 = big.NewInt(0xff)
) )
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment