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
dd21f079
Unverified
Commit
dd21f079
authored
Nov 22, 2019
by
Felix Lange
Committed by
GitHub
Nov 22, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
core/state: fix staticcheck warnings (#20357)
Also remove dependency on gopkg.in/check.v1 in tests.
parent
36a684ca
Changes
7
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
211 additions
and
228 deletions
+211
-228
dump.go
core/state/dump.go
+25
-22
journal.go
core/state/journal.go
+1
-3
main_test.go
core/state/main_test.go
+0
-25
state_test.go
core/state/state_test.go
+31
-22
statedb.go
core/state/statedb.go
+150
-150
statedb_test.go
core/state/statedb_test.go
+4
-5
go.mod
go.mod
+0
-1
No files found.
core/state/dump.go
View file @
dd21f079
...
...
@@ -47,7 +47,9 @@ type Dump struct {
}
// iterativeDump is a 'collector'-implementation which dump output line-by-line iteratively
type
iterativeDump
json
.
Encoder
type
iterativeDump
struct
{
*
json
.
Encoder
}
// Collector interface which the state trie calls during iteration
type
collector
interface
{
...
...
@@ -55,15 +57,15 @@ type collector interface {
onAccount
(
common
.
Address
,
DumpAccount
)
}
func
(
self
*
Dump
)
onRoot
(
root
common
.
Hash
)
{
self
.
Root
=
fmt
.
Sprintf
(
"%x"
,
root
)
func
(
d
*
Dump
)
onRoot
(
root
common
.
Hash
)
{
d
.
Root
=
fmt
.
Sprintf
(
"%x"
,
root
)
}
func
(
self
*
Dump
)
onAccount
(
addr
common
.
Address
,
account
DumpAccount
)
{
self
.
Accounts
[
addr
]
=
account
func
(
d
*
Dump
)
onAccount
(
addr
common
.
Address
,
account
DumpAccount
)
{
d
.
Accounts
[
addr
]
=
account
}
func
(
self
iterativeDump
)
onAccount
(
addr
common
.
Address
,
account
DumpAccount
)
{
func
(
d
iterativeDump
)
onAccount
(
addr
common
.
Address
,
account
DumpAccount
)
{
dumpAccount
:=
&
DumpAccount
{
Balance
:
account
.
Balance
,
Nonce
:
account
.
Nonce
,
...
...
@@ -77,25 +79,26 @@ func (self iterativeDump) onAccount(addr common.Address, account DumpAccount) {
if
addr
!=
(
common
.
Address
{})
{
dumpAccount
.
Address
=
&
addr
}
(
*
json
.
Encoder
)(
&
self
)
.
Encode
(
dumpAccount
)
d
.
Encode
(
dumpAccount
)
}
func
(
self
iterativeDump
)
onRoot
(
root
common
.
Hash
)
{
(
*
json
.
Encoder
)(
&
self
)
.
Encode
(
struct
{
func
(
d
iterativeDump
)
onRoot
(
root
common
.
Hash
)
{
d
.
Encode
(
struct
{
Root
common
.
Hash
`json:"root"`
}{
root
})
}
func
(
s
elf
*
StateDB
)
dump
(
c
collector
,
excludeCode
,
excludeStorage
,
excludeMissingPreimages
bool
)
{
func
(
s
*
StateDB
)
dump
(
c
collector
,
excludeCode
,
excludeStorage
,
excludeMissingPreimages
bool
)
{
emptyAddress
:=
(
common
.
Address
{})
missingPreimages
:=
0
c
.
onRoot
(
s
elf
.
trie
.
Hash
())
it
:=
trie
.
NewIterator
(
s
elf
.
trie
.
NodeIterator
(
nil
))
c
.
onRoot
(
s
.
trie
.
Hash
())
it
:=
trie
.
NewIterator
(
s
.
trie
.
NodeIterator
(
nil
))
for
it
.
Next
()
{
var
data
Account
if
err
:=
rlp
.
DecodeBytes
(
it
.
Value
,
&
data
);
err
!=
nil
{
panic
(
err
)
}
addr
:=
common
.
BytesToAddress
(
s
elf
.
trie
.
GetKey
(
it
.
Key
))
addr
:=
common
.
BytesToAddress
(
s
.
trie
.
GetKey
(
it
.
Key
))
obj
:=
newObject
(
nil
,
addr
,
data
)
account
:=
DumpAccount
{
Balance
:
data
.
Balance
.
String
(),
...
...
@@ -112,18 +115,18 @@ func (self *StateDB) dump(c collector, excludeCode, excludeStorage, excludeMissi
account
.
SecureKey
=
it
.
Key
}
if
!
excludeCode
{
account
.
Code
=
common
.
Bytes2Hex
(
obj
.
Code
(
s
elf
.
db
))
account
.
Code
=
common
.
Bytes2Hex
(
obj
.
Code
(
s
.
db
))
}
if
!
excludeStorage
{
account
.
Storage
=
make
(
map
[
common
.
Hash
]
string
)
storageIt
:=
trie
.
NewIterator
(
obj
.
getTrie
(
s
elf
.
db
)
.
NodeIterator
(
nil
))
storageIt
:=
trie
.
NewIterator
(
obj
.
getTrie
(
s
.
db
)
.
NodeIterator
(
nil
))
for
storageIt
.
Next
()
{
_
,
content
,
_
,
err
:=
rlp
.
Split
(
storageIt
.
Value
)
if
err
!=
nil
{
log
.
Error
(
"Failed to decode the value returned by iterator"
,
"error"
,
err
)
continue
}
account
.
Storage
[
common
.
BytesToHash
(
s
elf
.
trie
.
GetKey
(
storageIt
.
Key
))]
=
common
.
Bytes2Hex
(
content
)
account
.
Storage
[
common
.
BytesToHash
(
s
.
trie
.
GetKey
(
storageIt
.
Key
))]
=
common
.
Bytes2Hex
(
content
)
}
}
c
.
onAccount
(
addr
,
account
)
...
...
@@ -134,17 +137,17 @@ func (self *StateDB) dump(c collector, excludeCode, excludeStorage, excludeMissi
}
// RawDump returns the entire state an a single large object
func
(
s
elf
*
StateDB
)
RawDump
(
excludeCode
,
excludeStorage
,
excludeMissingPreimages
bool
)
Dump
{
func
(
s
*
StateDB
)
RawDump
(
excludeCode
,
excludeStorage
,
excludeMissingPreimages
bool
)
Dump
{
dump
:=
&
Dump
{
Accounts
:
make
(
map
[
common
.
Address
]
DumpAccount
),
}
s
elf
.
dump
(
dump
,
excludeCode
,
excludeStorage
,
excludeMissingPreimages
)
s
.
dump
(
dump
,
excludeCode
,
excludeStorage
,
excludeMissingPreimages
)
return
*
dump
}
// Dump returns a JSON string representing the entire state as a single json-object
func
(
s
elf
*
StateDB
)
Dump
(
excludeCode
,
excludeStorage
,
excludeMissingPreimages
bool
)
[]
byte
{
dump
:=
s
elf
.
RawDump
(
excludeCode
,
excludeStorage
,
excludeMissingPreimages
)
func
(
s
*
StateDB
)
Dump
(
excludeCode
,
excludeStorage
,
excludeMissingPreimages
bool
)
[]
byte
{
dump
:=
s
.
RawDump
(
excludeCode
,
excludeStorage
,
excludeMissingPreimages
)
json
,
err
:=
json
.
MarshalIndent
(
dump
,
""
,
" "
)
if
err
!=
nil
{
fmt
.
Println
(
"dump err"
,
err
)
...
...
@@ -153,6 +156,6 @@ func (self *StateDB) Dump(excludeCode, excludeStorage, excludeMissingPreimages b
}
// IterativeDump dumps out accounts as json-objects, delimited by linebreaks on stdout
func
(
s
elf
*
StateDB
)
IterativeDump
(
excludeCode
,
excludeStorage
,
excludeMissingPreimages
bool
,
output
*
json
.
Encoder
)
{
s
elf
.
dump
(
iterativeDump
(
*
output
)
,
excludeCode
,
excludeStorage
,
excludeMissingPreimages
)
func
(
s
*
StateDB
)
IterativeDump
(
excludeCode
,
excludeStorage
,
excludeMissingPreimages
bool
,
output
*
json
.
Encoder
)
{
s
.
dump
(
iterativeDump
{
output
}
,
excludeCode
,
excludeStorage
,
excludeMissingPreimages
)
}
core/state/journal.go
View file @
dd21f079
...
...
@@ -127,9 +127,7 @@ type (
hash
common
.
Hash
}
touchChange
struct
{
account
*
common
.
Address
prev
bool
prevDirty
bool
account
*
common
.
Address
}
)
...
...
core/state/main_test.go
deleted
100644 → 0
View file @
36a684ca
// Copyright 2014 The go-ethereum Authors
// This file is part of the go-ethereum library.
//
// The go-ethereum library is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// The go-ethereum library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
package
state
import
(
"testing"
checker
"gopkg.in/check.v1"
)
func
Test
(
t
*
testing
.
T
)
{
checker
.
TestingT
(
t
)
}
core/state/state_test.go
View file @
dd21f079
...
...
@@ -25,19 +25,24 @@ import (
"github.com/ethereum/go-ethereum/core/rawdb"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/ethdb"
checker
"gopkg.in/check.v1"
)
type
StateSuite
struct
{
var
toAddr
=
common
.
BytesToAddress
type
stateTest
struct
{
db
ethdb
.
Database
state
*
StateDB
}
var
_
=
checker
.
Suite
(
&
StateSuite
{})
func
newStateTest
()
*
stateTest
{
db
:=
rawdb
.
NewMemoryDatabase
()
sdb
,
_
:=
New
(
common
.
Hash
{},
NewDatabase
(
db
))
return
&
stateTest
{
db
:
db
,
state
:
sdb
}
}
var
toAddr
=
common
.
BytesToAddress
func
TestDump
(
t
*
testing
.
T
)
{
s
:=
newStateTest
()
func
(
s
*
StateSuite
)
TestDump
(
c
*
checker
.
C
)
{
// generate a few entries
obj1
:=
s
.
state
.
GetOrNewStateObject
(
toAddr
([]
byte
{
0x01
}))
obj1
.
AddBalance
(
big
.
NewInt
(
22
))
...
...
@@ -78,16 +83,12 @@ func (s *StateSuite) TestDump(c *checker.C) {
}
}`
if
got
!=
want
{
c
.
Errorf
(
"dump mismatch:
\n
got: %s
\n
want: %s
\n
"
,
got
,
want
)
t
.
Errorf
(
"dump mismatch:
\n
got: %s
\n
want: %s
\n
"
,
got
,
want
)
}
}
func
(
s
*
StateSuite
)
SetUpTest
(
c
*
checker
.
C
)
{
s
.
db
=
rawdb
.
NewMemoryDatabase
()
s
.
state
,
_
=
New
(
common
.
Hash
{},
NewDatabase
(
s
.
db
))
}
func
(
s
*
StateSuite
)
TestNull
(
c
*
checker
.
C
)
{
func
TestNull
(
t
*
testing
.
T
)
{
s
:=
newStateTest
()
address
:=
common
.
HexToAddress
(
"0x823140710bf13990e4500136726d8b55"
)
s
.
state
.
CreateAccount
(
address
)
//value := common.FromHex("0x823140710bf13990e4500136726d8b55")
...
...
@@ -97,18 +98,19 @@ func (s *StateSuite) TestNull(c *checker.C) {
s
.
state
.
Commit
(
false
)
if
value
:=
s
.
state
.
GetState
(
address
,
common
.
Hash
{});
value
!=
(
common
.
Hash
{})
{
c
.
Errorf
(
"expected empty current value, got %x"
,
value
)
t
.
Errorf
(
"expected empty current value, got %x"
,
value
)
}
if
value
:=
s
.
state
.
GetCommittedState
(
address
,
common
.
Hash
{});
value
!=
(
common
.
Hash
{})
{
c
.
Errorf
(
"expected empty committed value, got %x"
,
value
)
t
.
Errorf
(
"expected empty committed value, got %x"
,
value
)
}
}
func
(
s
*
StateSuite
)
TestSnapshot
(
c
*
checker
.
C
)
{
func
TestSnapshot
(
t
*
testing
.
T
)
{
stateobjaddr
:=
toAddr
([]
byte
(
"aa"
))
var
storageaddr
common
.
Hash
data1
:=
common
.
BytesToHash
([]
byte
{
42
})
data2
:=
common
.
BytesToHash
([]
byte
{
43
})
s
:=
newStateTest
()
// snapshot the genesis state
genesis
:=
s
.
state
.
Snapshot
()
...
...
@@ -121,21 +123,28 @@ func (s *StateSuite) TestSnapshot(c *checker.C) {
s
.
state
.
SetState
(
stateobjaddr
,
storageaddr
,
data2
)
s
.
state
.
RevertToSnapshot
(
snapshot
)
c
.
Assert
(
s
.
state
.
GetState
(
stateobjaddr
,
storageaddr
),
checker
.
DeepEquals
,
data1
)
c
.
Assert
(
s
.
state
.
GetCommittedState
(
stateobjaddr
,
storageaddr
),
checker
.
DeepEquals
,
common
.
Hash
{})
if
v
:=
s
.
state
.
GetState
(
stateobjaddr
,
storageaddr
);
v
!=
data1
{
t
.
Errorf
(
"wrong storage value %v, want %v"
,
v
,
data1
)
}
if
v
:=
s
.
state
.
GetCommittedState
(
stateobjaddr
,
storageaddr
);
v
!=
(
common
.
Hash
{})
{
t
.
Errorf
(
"wrong committed storage value %v, want %v"
,
v
,
common
.
Hash
{})
}
// revert up to the genesis state and ensure correct content
s
.
state
.
RevertToSnapshot
(
genesis
)
c
.
Assert
(
s
.
state
.
GetState
(
stateobjaddr
,
storageaddr
),
checker
.
DeepEquals
,
common
.
Hash
{})
c
.
Assert
(
s
.
state
.
GetCommittedState
(
stateobjaddr
,
storageaddr
),
checker
.
DeepEquals
,
common
.
Hash
{})
if
v
:=
s
.
state
.
GetState
(
stateobjaddr
,
storageaddr
);
v
!=
(
common
.
Hash
{})
{
t
.
Errorf
(
"wrong storage value %v, want %v"
,
v
,
common
.
Hash
{})
}
if
v
:=
s
.
state
.
GetCommittedState
(
stateobjaddr
,
storageaddr
);
v
!=
(
common
.
Hash
{})
{
t
.
Errorf
(
"wrong committed storage value %v, want %v"
,
v
,
common
.
Hash
{})
}
}
func
(
s
*
StateSuite
)
TestSnapshotEmpty
(
c
*
checker
.
C
)
{
func
TestSnapshotEmpty
(
t
*
testing
.
T
)
{
s
:=
newStateTest
()
s
.
state
.
RevertToSnapshot
(
s
.
state
.
Snapshot
())
}
// use testing instead of checker because checker does not support
// printing/logging in tests (-check.vv does not work)
func
TestSnapshot2
(
t
*
testing
.
T
)
{
state
,
_
:=
New
(
common
.
Hash
{},
NewDatabase
(
rawdb
.
NewMemoryDatabase
()))
...
...
core/state/statedb.go
View file @
dd21f079
This diff is collapsed.
Click to expand it.
core/state/statedb_test.go
View file @
dd21f079
...
...
@@ -29,8 +29,6 @@ import (
"testing"
"testing/quick"
"gopkg.in/check.v1"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/rawdb"
"github.com/ethereum/go-ethereum/core/types"
...
...
@@ -458,7 +456,8 @@ func (test *snapshotTest) checkEqual(state, checkstate *StateDB) error {
return
nil
}
func
(
s
*
StateSuite
)
TestTouchDelete
(
c
*
check
.
C
)
{
func
TestTouchDelete
(
t
*
testing
.
T
)
{
s
:=
newStateTest
()
s
.
state
.
GetOrNewStateObject
(
common
.
Address
{})
root
,
_
:=
s
.
state
.
Commit
(
false
)
s
.
state
.
Reset
(
root
)
...
...
@@ -467,11 +466,11 @@ func (s *StateSuite) TestTouchDelete(c *check.C) {
s
.
state
.
AddBalance
(
common
.
Address
{},
new
(
big
.
Int
))
if
len
(
s
.
state
.
journal
.
dirties
)
!=
1
{
c
.
Fatal
(
"expected one dirty state object"
)
t
.
Fatal
(
"expected one dirty state object"
)
}
s
.
state
.
RevertToSnapshot
(
snapshot
)
if
len
(
s
.
state
.
journal
.
dirties
)
!=
0
{
c
.
Fatal
(
"expected no dirty state object"
)
t
.
Fatal
(
"expected no dirty state object"
)
}
}
...
...
go.mod
View file @
dd21f079
...
...
@@ -59,7 +59,6 @@ require (
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f
golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7
golang.org/x/text v0.3.2
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127
gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce
gopkg.in/olebedev/go-duktape.v3 v3.0.0-20190213234257-ec84240a7772
gopkg.in/sourcemap.v1 v1.0.5 // indirect
...
...
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