From c59c826ab45e2e999dc9a173e5bce9727754f544 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 3 Apr 2015 11:27:56 +0200 Subject: [PATCH] fixed stack level --- cmd/mist/assets/examples/coin.html | 3 --- core/vm/gas.go | 7 ++++--- tests/vm/gh_test.go | 28 ++++++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 6 deletions(-) diff --git a/cmd/mist/assets/examples/coin.html b/cmd/mist/assets/examples/coin.html index b265f777d9..a734e144fb 100644 --- a/cmd/mist/assets/examples/coin.html +++ b/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() { diff --git a/core/vm/gas.go b/core/vm/gas.go index f7abe63f8f..33fc3a0024 100644 --- a/core/vm/gas.go +++ b/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) diff --git a/tests/vm/gh_test.go b/tests/vm/gh_test.go index cd5684dd49..69e2a9819c 100644 --- a/tests/vm/gh_test.go +++ b/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) +}