good morning!!!!
Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
B
bor
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package Registry
Container Registry
Harbor Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
github
maticnetwork
bor
Commits
2df8ad63
Commit
2df8ad63
authored
10 years ago
by
Jeffrey Wilcke
Browse files
Options
Downloads
Patches
Plain Diff
Added state tests
parent
a0523578
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
tests/helper/vm.go
+15
-0
15 additions, 0 deletions
tests/helper/vm.go
tests/vm/gh_test.go
+64
-5
64 additions, 5 deletions
tests/vm/gh_test.go
vm/address.go
+6
-2
6 additions, 2 deletions
vm/address.go
vm/execution.go
+1
-0
1 addition, 0 deletions
vm/execution.go
with
86 additions
and
7 deletions
tests/helper/vm.go
+
15
−
0
View file @
2df8ad63
...
...
@@ -3,6 +3,7 @@ package helper
import
(
"math/big"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/ethutil"
"github.com/ethereum/go-ethereum/state"
"github.com/ethereum/go-ethereum/vm"
...
...
@@ -66,3 +67,17 @@ func RunVm(state *state.State, env, exec map[string]string) ([]byte, *big.Int, e
return
ret
,
execution
.
Gas
,
err
}
func
RunState
(
state
*
state
.
State
,
env
,
tx
map
[
string
]
string
)
([]
byte
,
*
big
.
Int
,
error
)
{
address
:=
FromHex
(
tx
[
"to"
])
keyPair
,
_
:=
crypto
.
NewKeyPairFromSec
([]
byte
(
ethutil
.
Hex2Bytes
(
tx
[
"secretKey"
])))
caller
:=
state
.
GetOrNewStateObject
(
keyPair
.
Address
())
vmenv
:=
NewEnvFromMap
(
state
,
env
,
tx
)
vmenv
.
origin
=
caller
.
Address
()
evm
:=
vm
.
New
(
vmenv
,
vm
.
DebugVmTy
)
execution
:=
vm
.
NewExecution
(
evm
,
address
,
FromHex
(
tx
[
"data"
]),
ethutil
.
Big
(
tx
[
"gasLimit"
]),
ethutil
.
Big
(
tx
[
"gasPrice"
]),
ethutil
.
Big
(
tx
[
"value"
]))
ret
,
err
:=
execution
.
Exec
(
address
,
caller
)
return
ret
,
execution
.
Gas
,
err
}
This diff is collapsed.
Click to expand it.
tests/vm/gh_test.go
+
64
−
5
View file @
2df8ad63
...
...
@@ -2,6 +2,8 @@ package vm
import
(
"bytes"
"math/big"
"strconv"
"testing"
"github.com/ethereum/go-ethereum/ethutil"
...
...
@@ -29,10 +31,21 @@ func StateObjectFromAccount(addr string, account Account) *state.StateObject {
return
obj
}
type
Env
struct
{
CurrentCoinbase
string
CurrentDifficulty
string
CurrentGasLimit
string
CurrentNumber
string
CurrentTimestamp
interface
{}
PreviousHash
string
}
type
VmTest
struct
{
Callcreates
interface
{}
Env
map
[
string
]
string
//Env map[string]string
Env
Env
Exec
map
[
string
]
string
Transaction
map
[
string
]
string
Gas
string
Out
string
Post
map
[
string
]
Account
...
...
@@ -50,7 +63,31 @@ func RunVmTest(p string, t *testing.T) {
state
.
SetStateObject
(
obj
)
}
ret
,
gas
,
err
:=
helper
.
RunVm
(
state
,
test
.
Env
,
test
.
Exec
)
// XXX Yeah, yeah...
env
:=
make
(
map
[
string
]
string
)
env
[
"currentCoinbase"
]
=
test
.
Env
.
CurrentCoinbase
env
[
"currentDifficulty"
]
=
test
.
Env
.
CurrentDifficulty
env
[
"currentGasLimit"
]
=
test
.
Env
.
CurrentGasLimit
env
[
"currentNumber"
]
=
test
.
Env
.
CurrentNumber
env
[
"previousHash"
]
=
test
.
Env
.
PreviousHash
if
n
,
ok
:=
test
.
Env
.
CurrentTimestamp
.
(
float64
);
ok
{
env
[
"currentTimestamp"
]
=
strconv
.
Itoa
(
int
(
n
))
}
else
{
env
[
"currentTimestamp"
]
=
test
.
Env
.
CurrentTimestamp
.
(
string
)
}
var
(
ret
[]
byte
gas
*
big
.
Int
err
error
)
if
len
(
test
.
Exec
)
>
0
{
ret
,
gas
,
err
=
helper
.
RunVm
(
state
,
env
,
test
.
Exec
)
}
else
{
ret
,
gas
,
err
=
helper
.
RunState
(
state
,
env
,
test
.
Transaction
)
}
// When an error is returned it doesn't always mean the tests fails.
// Have to come up with some conditional failing mechanism.
if
err
!=
nil
{
...
...
@@ -62,9 +99,11 @@ func RunVmTest(p string, t *testing.T) {
t
.
Errorf
(
"%s's return failed. Expected %x, got %x
\n
"
,
name
,
rexp
,
ret
)
}
gexp
:=
ethutil
.
Big
(
test
.
Gas
)
if
gexp
.
Cmp
(
gas
)
!=
0
{
t
.
Errorf
(
"%s's gas failed. Expected %v, got %v
\n
"
,
name
,
gexp
,
gas
)
if
len
(
test
.
Gas
)
>
0
{
gexp
:=
ethutil
.
Big
(
test
.
Gas
)
if
gexp
.
Cmp
(
gas
)
!=
0
{
t
.
Errorf
(
"%s's gas failed. Expected %v, got %v
\n
"
,
name
,
gexp
,
gas
)
}
}
for
addr
,
account
:=
range
test
.
Post
{
...
...
@@ -123,3 +162,23 @@ func TestVm(t *testing.T) {
const
fn
=
"../files/vmtests/vmtests.json"
RunVmTest
(
fn
,
t
)
}
func
TestStateSystemOperations
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stSystemOperationsTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestStatePreCompiledContracts
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stPreCompiledContracts.json"
RunVmTest
(
fn
,
t
)
}
func
TestStateRecursiveCreate
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stRecursiveCreate.json"
RunVmTest
(
fn
,
t
)
}
func
TestStateSpecialTest
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stSpecialTest.json"
RunVmTest
(
fn
,
t
)
}
This diff is collapsed.
Click to expand it.
vm/address.go
+
6
−
2
View file @
2df8ad63
...
...
@@ -31,12 +31,16 @@ func sha256Func(in []byte) []byte {
}
func
ripemd160Func
(
in
[]
byte
)
[]
byte
{
return
ethutil
.
Righ
tPadBytes
(
crypto
.
Ripemd160
(
in
),
32
)
return
ethutil
.
Lef
tPadBytes
(
crypto
.
Ripemd160
(
in
),
32
)
}
func
ecrecoverFunc
(
in
[]
byte
)
[]
byte
{
// In case of an invalid sig. Defaults to return nil
defer
func
()
{
recover
()
}()
return
crypto
.
Ecrecover
(
in
)
hash
:=
in
[
:
32
]
v
:=
ethutil
.
BigD
(
in
[
32
:
64
])
.
Bytes
()[
0
]
-
27
sig
:=
append
(
in
[
64
:
],
v
)
return
crypto
.
Sha3
(
crypto
.
Ecrecover
(
append
(
hash
,
sig
...
))[
1
:
])
}
This diff is collapsed.
Click to expand it.
vm/execution.go
+
1
−
0
View file @
2df8ad63
...
...
@@ -69,6 +69,7 @@ func (self *Execution) exec(code, caddr []byte, caller ClosureRef) (ret []byte,
if
self
.
Gas
.
Cmp
(
p
.
Gas
)
>=
0
{
ret
=
p
.
Call
(
self
.
input
)
self
.
vm
.
Printf
(
"NATIVE_FUNC(%x) => %x"
,
naddr
,
ret
)
self
.
vm
.
Endl
()
}
}
else
{
// Create a new callable closure
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment