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
b01cb240
Commit
b01cb240
authored
Jul 07, 2014
by
obscuren
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixed state reset case
parent
42bb3d8a
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
29 additions
and
4 deletions
+29
-4
state.go
ethchain/state.go
+15
-1
state_object.go
ethchain/state_object.go
+1
-0
state_transition.go
ethchain/state_transition.go
+13
-3
No files found.
ethchain/state.go
View file @
b01cb240
...
...
@@ -67,11 +67,19 @@ func (self *State) Empty() {
func
(
self
*
State
)
Update
()
{
for
_
,
stateObject
:=
range
self
.
stateObjects
{
if
stateObject
.
remove
{
self
.
trie
.
Delete
(
string
(
stateObject
.
Address
())
)
self
.
DeleteStateObject
(
stateObject
)
}
else
{
println
(
ethutil
.
Bytes2Hex
(
stateObject
.
Address
()))
self
.
UpdateStateObject
(
stateObject
)
}
}
// FIXME trie delete is broken
valid
,
t2
:=
ethtrie
.
ParanoiaCheck
(
self
.
trie
)
if
!
valid
{
self
.
trie
=
t2
}
}
// Purges the current trie.
...
...
@@ -100,6 +108,12 @@ func (self *State) UpdateStateObject(stateObject *StateObject) {
self
.
manifest
.
AddObjectChange
(
stateObject
)
}
func
(
self
*
State
)
DeleteStateObject
(
stateObject
*
StateObject
)
{
self
.
trie
.
Delete
(
string
(
stateObject
.
Address
()))
delete
(
self
.
stateObjects
,
string
(
stateObject
.
Address
()))
}
func
(
self
*
State
)
GetStateObject
(
addr
[]
byte
)
*
StateObject
{
stateObject
:=
self
.
stateObjects
[
string
(
addr
)]
if
stateObject
!=
nil
{
...
...
ethchain/state_object.go
View file @
b01cb240
...
...
@@ -84,6 +84,7 @@ func NewStateObjectFromBytes(address, data []byte) *StateObject {
func
(
self
*
StateObject
)
MarkForDeletion
()
{
self
.
remove
=
true
statelogger
.
Infof
(
"%x: #%d %v (deletion)
\n
"
,
self
.
Address
(),
self
.
Nonce
,
self
.
Amount
)
}
func
(
c
*
StateObject
)
GetAddr
(
addr
[]
byte
)
*
ethutil
.
Value
{
...
...
ethchain/state_transition.go
View file @
b01cb240
...
...
@@ -176,15 +176,23 @@ func (self *StateTransition) TransitionState() (err error) {
return
}
receiver
=
self
.
Receiver
()
/* FIXME
* If tx goes TO "0", goes OOG during init, reverse changes, but initial endowment should happen. The ether is lost forever
*/
var
snapshot
*
State
// If the receiver is nil it's a contract (\0*32).
if
receiver
==
nil
{
if
tx
.
CreatesContract
()
{
snapshot
=
self
.
state
.
Copy
()
// Create a new state object for the contract
receiver
=
self
.
MakeStateObject
(
self
.
state
,
tx
)
self
.
rec
=
receiver
if
receiver
==
nil
{
return
fmt
.
Errorf
(
"Unable to create contract"
)
}
}
else
{
receiver
=
self
.
Receiver
()
}
// Transfer value from sender to receiver
...
...
@@ -192,7 +200,9 @@ func (self *StateTransition) TransitionState() (err error) {
return
}
snapshot
:=
self
.
state
.
Copy
()
if
snapshot
==
nil
{
snapshot
=
self
.
state
.
Copy
()
}
// Process the init code and create 'valid' contract
if
IsContractAddr
(
self
.
receiver
)
{
...
...
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