Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
211cb03f
Commit
211cb03f
authored
Mar 23, 2015
by
obscuren
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop
parents
253ecdc8
9562a984
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
78 additions
and
24 deletions
+78
-24
blocktest.go
cmd/ethereum/blocktest.go
+21
-7
main.go
cmd/ethtest/main.go
+1
-1
flags.go
cmd/utils/flags.go
+1
-1
chain_manager.go
core/chain_manager.go
+4
-2
args.go
rpc/args.go
+8
-8
blocktest.go
tests/blocktest.go
+29
-4
xeth.go
xeth/xeth.go
+14
-1
No files found.
cmd/ethereum/blocktest.go
View file @
211cb03f
...
...
@@ -5,9 +5,9 @@ import (
"github.com/codegangsta/cli"
"github.com/ethereum/go-ethereum/cmd/utils"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/eth"
"github.com/ethereum/go-ethereum/ethdb"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/tests"
)
...
...
@@ -26,10 +26,10 @@ be able to interact with the chain defined by the test.
}
func
runblocktest
(
ctx
*
cli
.
Context
)
{
if
len
(
ctx
.
Args
())
!=
2
{
utils
.
Fatalf
(
"
This command requires two arguments.
"
)
if
len
(
ctx
.
Args
())
!=
3
{
utils
.
Fatalf
(
"
Usage: ethereum blocktest <path-to-test-file> <test-name> {rpc, norpc}
"
)
}
file
,
testname
:=
ctx
.
Args
()[
0
],
ctx
.
Args
()[
1
]
file
,
testname
,
startrpc
:=
ctx
.
Args
()[
0
],
ctx
.
Args
()[
1
],
ctx
.
Args
()[
2
]
bt
,
err
:=
tests
.
LoadBlockTests
(
file
)
if
err
!=
nil
{
...
...
@@ -42,6 +42,7 @@ func runblocktest(ctx *cli.Context) {
cfg
:=
utils
.
MakeEthConfig
(
ClientIdentifier
,
Version
,
ctx
)
cfg
.
NewDB
=
func
(
path
string
)
(
common
.
Database
,
error
)
{
return
ethdb
.
NewMemDatabase
()
}
cfg
.
MaxPeers
=
0
// disable network
ethereum
,
err
:=
eth
.
New
(
cfg
)
if
err
!=
nil
{
utils
.
Fatalf
(
"%v"
,
err
)
...
...
@@ -51,7 +52,8 @@ func runblocktest(ctx *cli.Context) {
ethereum
.
ResetWithGenesisBlock
(
test
.
Genesis
)
// import pre accounts
if
err
:=
test
.
InsertPreState
(
ethereum
.
StateDb
());
err
!=
nil
{
statedb
,
err
:=
test
.
InsertPreState
(
ethereum
.
StateDb
())
if
err
!=
nil
{
utils
.
Fatalf
(
"could not insert genesis accounts: %v"
,
err
)
}
...
...
@@ -60,7 +62,19 @@ func runblocktest(ctx *cli.Context) {
if
err
:=
chain
.
InsertChain
(
test
.
Blocks
);
err
!=
nil
{
utils
.
Fatalf
(
"Block Test load error: %v"
,
err
)
}
else
{
fmt
.
Println
(
"Block Test chain loaded, starting ethereum."
)
fmt
.
Println
(
"Block Test chain loaded"
)
}
if
err
:=
test
.
ValidatePostState
(
statedb
);
err
!=
nil
{
utils
.
Fatalf
(
"post state validation failed: %v"
,
err
)
}
fmt
.
Println
(
"Block Test post state validated, starting ethereum."
)
if
startrpc
==
"rpc"
{
startEth
(
ctx
,
ethereum
)
utils
.
StartRPC
(
ethereum
,
ctx
)
ethereum
.
WaitForShutdown
()
}
else
{
startEth
(
ctx
,
ethereum
)
}
startEth
(
ctx
,
ethereum
)
}
cmd/ethtest/main.go
View file @
211cb03f
...
...
@@ -219,7 +219,7 @@ func RunVmTest(r io.Reader) (failed int) {
}
func
main
()
{
helper
.
Logger
.
SetLogLevel
(
5
)
//
helper.Logger.SetLogLevel(5)
vm
.
Debug
=
true
if
len
(
os
.
Args
)
>
1
{
...
...
cmd/utils/flags.go
View file @
211cb03f
...
...
@@ -256,7 +256,7 @@ func StartRPC(eth *eth.Ethereum, ctx *cli.Context) {
addr
:=
ctx
.
GlobalString
(
RPCListenAddrFlag
.
Name
)
port
:=
ctx
.
GlobalInt
(
RPCPortFlag
.
Name
)
dataDir
:=
ctx
.
GlobalString
(
DataDirFlag
.
Name
)
fmt
.
Println
(
"Starting RPC on port: "
,
port
)
l
,
err
:=
net
.
Listen
(
"tcp"
,
fmt
.
Sprintf
(
"%s:%d"
,
addr
,
port
))
if
err
!=
nil
{
Fatalf
(
"Can't listen on %s:%d: %v"
,
addr
,
port
,
err
)
...
...
core/chain_manager.go
View file @
211cb03f
...
...
@@ -32,8 +32,10 @@ type StateQuery interface {
func
CalcDifficulty
(
block
,
parent
*
types
.
Header
)
*
big
.
Int
{
diff
:=
new
(
big
.
Int
)
min
:=
big
.
NewInt
(
2048
)
adjust
:=
new
(
big
.
Int
)
.
Div
(
parent
.
Difficulty
,
min
)
diffBoundDiv
:=
big
.
NewInt
(
2048
)
min
:=
big
.
NewInt
(
131072
)
adjust
:=
new
(
big
.
Int
)
.
Div
(
parent
.
Difficulty
,
diffBoundDiv
)
if
(
block
.
Time
-
parent
.
Time
)
<
8
{
diff
.
Add
(
parent
.
Difficulty
,
adjust
)
}
else
{
...
...
rpc/args.go
View file @
211cb03f
...
...
@@ -8,7 +8,7 @@ import (
"github.com/ethereum/go-ethereum/common"
)
func
block
Age
(
raw
interface
{},
number
*
int64
)
(
err
error
)
{
func
block
Height
(
raw
interface
{},
number
*
int64
)
(
err
error
)
{
// Parse as integer
num
,
ok
:=
raw
.
(
float64
)
if
ok
{
...
...
@@ -26,7 +26,7 @@ func blockAge(raw interface{}, number *int64) (err error) {
case
"latest"
:
*
number
=
-
1
case
"pending"
:
*
number
=
0
*
number
=
-
2
default
:
*
number
=
common
.
String2Big
(
str
)
.
Int64
()
}
...
...
@@ -137,7 +137,7 @@ func (args *NewTxArgs) UnmarshalJSON(b []byte) (err error) {
return
NewDecodeParamError
(
err
.
Error
())
}
if
err
:=
block
Age
(
raw
,
&
args
.
BlockNumber
);
err
!=
nil
{
if
err
:=
block
Height
(
raw
,
&
args
.
BlockNumber
);
err
!=
nil
{
return
err
}
}
...
...
@@ -174,7 +174,7 @@ func (args *GetStorageArgs) UnmarshalJSON(b []byte) (err error) {
args
.
Address
=
addstr
if
len
(
obj
)
>
1
{
if
err
:=
block
Age
(
obj
[
1
],
&
args
.
BlockNumber
);
err
!=
nil
{
if
err
:=
block
Height
(
obj
[
1
],
&
args
.
BlockNumber
);
err
!=
nil
{
return
err
}
}
...
...
@@ -218,7 +218,7 @@ func (args *GetStorageAtArgs) UnmarshalJSON(b []byte) (err error) {
args
.
Key
=
keystr
if
len
(
obj
)
>
2
{
if
err
:=
block
Age
(
obj
[
2
],
&
args
.
BlockNumber
);
err
!=
nil
{
if
err
:=
block
Height
(
obj
[
2
],
&
args
.
BlockNumber
);
err
!=
nil
{
return
err
}
}
...
...
@@ -259,7 +259,7 @@ func (args *GetTxCountArgs) UnmarshalJSON(b []byte) (err error) {
args
.
Address
=
addstr
if
len
(
obj
)
>
1
{
if
err
:=
block
Age
(
obj
[
1
],
&
args
.
BlockNumber
);
err
!=
nil
{
if
err
:=
block
Height
(
obj
[
1
],
&
args
.
BlockNumber
);
err
!=
nil
{
return
err
}
}
...
...
@@ -296,7 +296,7 @@ func (args *GetBalanceArgs) UnmarshalJSON(b []byte) (err error) {
args
.
Address
=
addstr
if
len
(
obj
)
>
1
{
if
err
:=
block
Age
(
obj
[
1
],
&
args
.
BlockNumber
);
err
!=
nil
{
if
err
:=
block
Height
(
obj
[
1
],
&
args
.
BlockNumber
);
err
!=
nil
{
return
err
}
}
...
...
@@ -333,7 +333,7 @@ func (args *GetDataArgs) UnmarshalJSON(b []byte) (err error) {
args
.
Address
=
addstr
if
len
(
obj
)
>
1
{
if
err
:=
block
Age
(
obj
[
1
],
&
args
.
BlockNumber
);
err
!=
nil
{
if
err
:=
block
Height
(
obj
[
1
],
&
args
.
BlockNumber
);
err
!=
nil
{
return
err
}
}
...
...
tests/blocktest.go
View file @
211cb03f
...
...
@@ -19,11 +19,11 @@ import (
)
// Block Test JSON Format
type
btJSON
struct
{
Blocks
[]
btBlock
GenesisBlockHeader
btHeader
Pre
map
[
string
]
btAccount
PostState
map
[
string
]
btAccount
}
type
btAccount
struct
{
...
...
@@ -97,7 +97,7 @@ func LoadBlockTests(file string) (map[string]*BlockTest, error) {
// InsertPreState populates the given database with the genesis
// accounts defined by the test.
func
(
t
*
BlockTest
)
InsertPreState
(
db
common
.
Database
)
error
{
func
(
t
*
BlockTest
)
InsertPreState
(
db
common
.
Database
)
(
*
state
.
StateDB
,
error
)
{
statedb
:=
state
.
New
(
common
.
Hash
{},
db
)
for
addrString
,
acct
:=
range
t
.
preAccounts
{
// XXX: is is worth it checking for errors here?
...
...
@@ -119,8 +119,33 @@ func (t *BlockTest) InsertPreState(db common.Database) error {
// sync trie to disk
statedb
.
Sync
()
if
t
.
Genesis
.
Root
()
!=
statedb
.
Root
()
{
return
errors
.
New
(
"computed state root does not match genesis block"
)
if
!
bytes
.
Equal
(
t
.
Genesis
.
Root
()
.
Bytes
(),
statedb
.
Root
()
.
Bytes
())
{
return
nil
,
errors
.
New
(
"computed state root does not match genesis block"
)
}
return
statedb
,
nil
}
func
(
t
*
BlockTest
)
ValidatePostState
(
statedb
*
state
.
StateDB
)
error
{
for
addrString
,
acct
:=
range
t
.
preAccounts
{
// XXX: is is worth it checking for errors here?
addr
,
_
:=
hex
.
DecodeString
(
addrString
)
code
,
_
:=
hex
.
DecodeString
(
strings
.
TrimPrefix
(
acct
.
Code
,
"0x"
))
balance
,
_
:=
new
(
big
.
Int
)
.
SetString
(
acct
.
Balance
,
0
)
nonce
,
_
:=
strconv
.
ParseUint
(
acct
.
Nonce
,
16
,
64
)
// address is indirectly verified by the other fields, as it's the db key
code2
:=
statedb
.
GetCode
(
common
.
BytesToAddress
(
addr
))
balance2
:=
statedb
.
GetBalance
(
common
.
BytesToAddress
(
addr
))
nonce2
:=
statedb
.
GetNonce
(
common
.
BytesToAddress
(
addr
))
if
!
bytes
.
Equal
(
code2
,
code
)
{
return
fmt
.
Errorf
(
"account code mismatch, addr, found, expected: "
,
addrString
,
hex
.
EncodeToString
(
code2
),
hex
.
EncodeToString
(
code
))
}
if
balance2
.
Cmp
(
balance
)
!=
0
{
return
fmt
.
Errorf
(
"account balance mismatch, addr, found, expected: "
,
addrString
,
balance2
,
balance
)
}
if
nonce2
!=
nonce
{
return
fmt
.
Errorf
(
"account nonce mismatch, addr, found, expected: "
,
addrString
,
nonce2
,
nonce
)
}
}
return
nil
}
...
...
xeth/xeth.go
View file @
211cb03f
...
...
@@ -176,9 +176,12 @@ func (self *XEth) AtStateNum(num int64) *XEth {
chain
:=
self
.
Backend
()
.
ChainManager
()
var
block
*
types
.
Block
// -1 generally means "latest"
// -2 means "pending", which has no blocknum
if
num
<
0
{
num
=
chain
.
CurrentBlock
()
.
Number
()
.
Int64
()
+
num
+
1
num
=
chain
.
CurrentBlock
()
.
Number
()
.
Int64
()
}
block
=
chain
.
GetBlockByNumber
(
uint64
(
num
))
var
st
*
state
.
StateDB
...
...
@@ -229,6 +232,11 @@ func (self *XEth) EthTransactionByHash(hash string) *types.Transaction {
}
func
(
self
*
XEth
)
BlockByNumber
(
num
int64
)
*
Block
{
if
num
==
-
2
{
// "pending" is non-existant
return
&
Block
{}
}
if
num
==
-
1
{
return
NewBlock
(
self
.
chainManager
.
CurrentBlock
())
}
...
...
@@ -237,6 +245,11 @@ func (self *XEth) BlockByNumber(num int64) *Block {
}
func
(
self
*
XEth
)
EthBlockByNumber
(
num
int64
)
*
types
.
Block
{
if
num
==
-
2
{
// "pending" is non-existant
return
&
types
.
Block
{}
}
if
num
==
-
1
{
return
self
.
chainManager
.
CurrentBlock
()
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment