Browse Source

fixed stack level

obscuren 10 years ago
parent
commit
c59c826ab4
3 changed files with 32 additions and 6 deletions
  1. 0 3
      cmd/mist/assets/examples/coin.html
  2. 4 3
      core/vm/gas.go
  3. 28 0
      tests/vm/gh_test.go

+ 0 - 3
cmd/mist/assets/examples/coin.html

@@ -85,9 +85,6 @@
 
 	function refresh() {
         document.querySelector("#balance").innerHTML = contract.call({from:eth.coinbase}).balance(eth.coinbase);
-
-		var table = document.querySelector("#table_body");
-		table.innerHTML = ""; // clear
 	}
 
 	function transact() {

+ 4 - 3
core/vm/gas.go

@@ -2,8 +2,9 @@ package vm
 
 import (
 	"fmt"
-	"github.com/ethereum/go-ethereum/params"
 	"math/big"
+
+	"github.com/ethereum/go-ethereum/params"
 )
 
 var (
@@ -37,8 +38,8 @@ func baseCheck(op OpCode, stack *stack, gas *big.Int) error {
 			return err
 		}
 
-		if r.stackPush && len(stack.data)-r.stackPop+1 > int(params.StackLimit.Int64()) {
-			return fmt.Errorf("stack limit reached (%d)", params.StackLimit.Int64())
+		if r.stackPush && len(stack.data)-r.stackPop > int(params.StackLimit.Int64()) {
+			return fmt.Errorf("stack limit reached %d (%d)", len(stack.data), params.StackLimit.Int64())
 		}
 
 		gas.Add(gas, r.gas)

+ 28 - 0
tests/vm/gh_test.go

@@ -81,6 +81,13 @@ func RunVmTest(p string, t *testing.T) {
 	helper.CreateFileTests(t, p, &tests)
 
 	for name, test := range tests {
+		/*
+			vm.Debug = true
+			helper.Logger.SetLogLevel(5)
+			if name != "Call1MB1024Calldepth" {
+				continue
+			}
+		*/
 		db, _ := ethdb.NewMemDatabase()
 		statedb := state.New(common.Hash{}, db)
 		for addr, account := range test.Pre {
@@ -311,3 +318,24 @@ func TestStateTransaction(t *testing.T) {
 	const fn = "../files/StateTests/stTransactionTest.json"
 	RunVmTest(fn, t)
 }
+
+func TestCallCreateCallCode(t *testing.T) {
+	const fn = "../files/StateTests/stCallCreateCallCodeTest.json"
+	RunVmTest(fn, t)
+}
+
+func TestMemory(t *testing.T) {
+	const fn = "../files/StateTests/stMemoryTest.json"
+	RunVmTest(fn, t)
+}
+
+func TestQuadraticComplexity(t *testing.T) {
+	t.Skip() // takes too long
+	const fn = "../files/StateTests/stQuadraticComplexityTest.json"
+	RunVmTest(fn, t)
+}
+
+func TestSolidity(t *testing.T) {
+	const fn = "../files/StateTests/stSolidityTest.json"
+	RunVmTest(fn, t)
+}