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
93261b98
Commit
93261b98
authored
Jul 21, 2014
by
obscuren
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Changed iterator
parent
9f00aeae
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
31 additions
and
15 deletions
+31
-15
state.go
ethchain/state.go
+2
-12
state_object.go
ethchain/state_object.go
+26
-0
vm.go
ethchain/vm.go
+1
-1
types.go
ethpub/types.go
+2
-2
No files found.
ethchain/state.go
View file @
93261b98
package
ethchain
import
(
"fmt"
"github.com/ethereum/eth-go/ethcrypto"
"github.com/ethereum/eth-go/ethtrie"
"github.com/ethereum/eth-go/ethutil"
...
...
@@ -27,12 +26,6 @@ func NewState(trie *ethtrie.Trie) *State {
return
&
State
{
trie
:
trie
,
stateObjects
:
make
(
map
[
string
]
*
StateObject
),
manifest
:
NewManifest
()}
}
// Iterate over each storage address and yield callback
func
(
s
*
State
)
EachStorage
(
cb
ethtrie
.
EachCallback
)
{
it
:=
s
.
trie
.
NewIterator
()
it
.
Each
(
cb
)
}
// Retrieve the balance from the given address or 0 if object not found
func
(
self
*
State
)
GetBalance
(
addr
[]
byte
)
*
big
.
Int
{
stateObject
:=
self
.
GetStateObject
(
addr
)
...
...
@@ -214,11 +207,8 @@ func (self *State) Update() {
// Debug stuff
func
(
self
*
State
)
CreateOutputForDiff
()
{
for
addr
,
stateObject
:=
range
self
.
stateObjects
{
fmt
.
Printf
(
"%x %x %x %x
\n
"
,
addr
,
stateObject
.
state
.
Root
(),
stateObject
.
Amount
.
Bytes
(),
stateObject
.
Nonce
)
stateObject
.
state
.
EachStorage
(
func
(
addr
string
,
value
*
ethutil
.
Value
)
{
fmt
.
Printf
(
"%x %x
\n
"
,
addr
,
value
.
Bytes
())
})
for
_
,
stateObject
:=
range
self
.
stateObjects
{
stateObject
.
CreateOutputForDiff
()
}
}
...
...
ethchain/state_object.go
View file @
93261b98
...
...
@@ -151,6 +151,24 @@ func (self *StateObject) setStorage(k []byte, value *ethutil.Value) {
*/
}
// Iterate over each storage address and yield callback
func
(
self
*
StateObject
)
EachStorage
(
cb
ethtrie
.
EachCallback
)
{
// First loop over the uncommit/cached values in storage
for
key
,
value
:=
range
self
.
storage
{
// XXX Most iterators Fns as it stands require encoded values
encoded
:=
ethutil
.
NewValue
(
value
.
Encode
())
cb
(
key
,
encoded
)
}
it
:=
self
.
state
.
trie
.
NewIterator
()
it
.
Each
(
func
(
key
string
,
value
*
ethutil
.
Value
)
{
// If it's cached don't call the callback.
if
self
.
storage
[
key
]
==
nil
{
cb
(
key
,
value
)
}
})
}
func
(
self
*
StateObject
)
Sync
()
{
/*
fmt.Println("############# BEFORE ################")
...
...
@@ -303,6 +321,14 @@ func (c *StateObject) Init() Code {
return
c
.
initScript
}
// Debug stuff
func
(
self
*
StateObject
)
CreateOutputForDiff
()
{
fmt
.
Printf
(
"%x %x %x %x
\n
"
,
self
.
Address
(),
self
.
state
.
Root
(),
self
.
Amount
.
Bytes
(),
self
.
Nonce
)
self
.
EachStorage
(
func
(
addr
string
,
value
*
ethutil
.
Value
)
{
fmt
.
Printf
(
"%x %x
\n
"
,
addr
,
value
.
Bytes
())
})
}
//
// Encoding
//
...
...
ethchain/vm.go
View file @
93261b98
...
...
@@ -158,7 +158,7 @@ func (vm *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
switch
op
{
case
STOP
,
RETURN
,
SUICIDE
:
closure
.
object
.
Sync
()
closure
.
object
.
state
.
EachStorage
(
func
(
key
string
,
value
*
ethutil
.
Value
)
{
closure
.
object
.
EachStorage
(
func
(
key
string
,
value
*
ethutil
.
Value
)
{
value
.
Decode
()
fmt
.
Printf
(
"%x %x
\n
"
,
new
(
big
.
Int
)
.
SetBytes
([]
byte
(
key
))
.
Bytes
(),
value
.
Bytes
())
})
...
...
ethpub/types.go
View file @
93261b98
...
...
@@ -215,7 +215,7 @@ func (c *PStateObject) IsContract() bool {
}
func
(
self
*
PStateObject
)
EachStorage
(
cb
ethtrie
.
EachCallback
)
{
self
.
object
.
State
()
.
EachStorage
(
cb
)
self
.
object
.
EachStorage
(
cb
)
}
type
KeyVal
struct
{
...
...
@@ -226,7 +226,7 @@ type KeyVal struct {
func
(
c
*
PStateObject
)
StateKeyVal
(
asJson
bool
)
interface
{}
{
var
values
[]
KeyVal
if
c
.
object
!=
nil
{
c
.
object
.
State
()
.
EachStorage
(
func
(
name
string
,
value
*
ethutil
.
Value
)
{
c
.
object
.
EachStorage
(
func
(
name
string
,
value
*
ethutil
.
Value
)
{
values
=
append
(
values
,
KeyVal
{
name
,
ethutil
.
Bytes2Hex
(
value
.
Bytes
())})
})
}
...
...
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