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
90eb4f19
Commit
90eb4f19
authored
Jul 04, 2014
by
obscuren
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Debug output, minor fixes and tweaks
* Script compile length fix * Transition fix
parent
23b5b5fa
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
26 additions
and
12 deletions
+26
-12
state_manager.go
ethchain/state_manager.go
+14
-1
state_transition.go
ethchain/state_transition.go
+5
-6
vm.go
ethchain/vm.go
+4
-3
pub.go
ethpub/pub.go
+1
-1
script.go
ethutil/script.go
+2
-1
No files found.
ethchain/state_manager.go
View file @
90eb4f19
...
@@ -181,11 +181,24 @@ func (sm *StateManager) Process(block *Block, dontReact bool) (err error) {
...
@@ -181,11 +181,24 @@ func (sm *StateManager) Process(block *Block, dontReact bool) (err error) {
if
err
!=
nil
{
if
err
!=
nil
{
if
len
(
receipts
)
==
len
(
block
.
Receipts
())
{
if
len
(
receipts
)
==
len
(
block
.
Receipts
())
{
for
i
,
receipt
:=
range
block
.
Receipts
()
{
for
i
,
receipt
:=
range
block
.
Receipts
()
{
statelogger
.
Debug
f
(
"diff (r) %v ~ %x <=> (c) %v ~ %x (%x)
\n
"
,
receipt
.
CumulativeGasUsed
,
receipt
.
PostState
[
0
:
4
],
receipts
[
i
]
.
CumulativeGasUsed
,
receipts
[
i
]
.
PostState
[
0
:
4
],
receipt
.
Tx
.
Hash
())
statelogger
.
Info
f
(
"diff (r) %v ~ %x <=> (c) %v ~ %x (%x)
\n
"
,
receipt
.
CumulativeGasUsed
,
receipt
.
PostState
[
0
:
4
],
receipts
[
i
]
.
CumulativeGasUsed
,
receipts
[
i
]
.
PostState
[
0
:
4
],
receipt
.
Tx
.
Hash
())
}
}
}
else
{
}
else
{
statelogger
.
Warnln
(
"Unable to print receipt diff. Length didn't match"
,
len
(
receipts
),
"for"
,
len
(
block
.
Receipts
()))
statelogger
.
Warnln
(
"Unable to print receipt diff. Length didn't match"
,
len
(
receipts
),
"for"
,
len
(
block
.
Receipts
()))
}
}
}
else
{
/*
for i, receipt := range receipts {
gu := new(big.Int)
if i != 0 {
gu.Sub(receipt.CumulativeGasUsed, receipts[i-1].CumulativeGasUsed)
} else {
gu.Set(receipt.CumulativeGasUsed)
}
statelogger.Infof("[r] %v ~ %x (%x)\n", gu, receipt.PostState[0:4], receipt.Tx.Hash())
}
*/
}
}
}()
}()
...
...
ethchain/state_transition.go
View file @
90eb4f19
...
@@ -201,8 +201,7 @@ func (self *StateTransition) TransitionState() (err error) {
...
@@ -201,8 +201,7 @@ func (self *StateTransition) TransitionState() (err error) {
// script section for the state object.
// script section for the state object.
self
.
data
=
nil
self
.
data
=
nil
statelogger
.
Debugln
(
"~> init"
)
code
,
err
:=
self
.
Eval
(
receiver
.
Init
(),
receiver
,
"init"
)
code
,
err
:=
self
.
Eval
(
receiver
.
Init
(),
receiver
)
if
err
!=
nil
{
if
err
!=
nil
{
//self.state.Set(snapshot)
//self.state.Set(snapshot)
self
.
state
.
ResetStateObject
(
receiver
)
self
.
state
.
ResetStateObject
(
receiver
)
...
@@ -213,8 +212,7 @@ func (self *StateTransition) TransitionState() (err error) {
...
@@ -213,8 +212,7 @@ func (self *StateTransition) TransitionState() (err error) {
receiver
.
script
=
code
receiver
.
script
=
code
}
else
{
}
else
{
if
len
(
receiver
.
Script
())
>
0
{
if
len
(
receiver
.
Script
())
>
0
{
statelogger
.
Debugln
(
"~> code"
)
_
,
err
=
self
.
Eval
(
receiver
.
Script
(),
receiver
,
"code"
)
_
,
err
=
self
.
Eval
(
receiver
.
Script
(),
receiver
)
if
err
!=
nil
{
if
err
!=
nil
{
//self.state.Set(snapshot)
//self.state.Set(snapshot)
self
.
state
.
ResetStateObject
(
receiver
)
self
.
state
.
ResetStateObject
(
receiver
)
...
@@ -240,7 +238,7 @@ func (self *StateTransition) transferValue(sender, receiver *StateObject) error
...
@@ -240,7 +238,7 @@ func (self *StateTransition) transferValue(sender, receiver *StateObject) error
return
nil
return
nil
}
}
func
(
self
*
StateTransition
)
Eval
(
script
[]
byte
,
context
*
StateObject
)
(
ret
[]
byte
,
err
error
)
{
func
(
self
*
StateTransition
)
Eval
(
script
[]
byte
,
context
*
StateObject
,
typ
string
)
(
ret
[]
byte
,
err
error
)
{
var
(
var
(
block
=
self
.
block
block
=
self
.
block
initiator
=
self
.
Sender
()
initiator
=
self
.
Sender
()
...
@@ -259,6 +257,7 @@ func (self *StateTransition) Eval(script []byte, context *StateObject) (ret []by
...
@@ -259,6 +257,7 @@ func (self *StateTransition) Eval(script []byte, context *StateObject) (ret []by
Value
:
self
.
value
,
Value
:
self
.
value
,
})
})
vm
.
Verbose
=
true
vm
.
Verbose
=
true
vm
.
Fn
=
typ
ret
,
err
=
Call
(
vm
,
closure
,
self
.
data
)
ret
,
err
=
Call
(
vm
,
closure
,
self
.
data
)
...
@@ -279,7 +278,7 @@ func Call(vm *Vm, closure *Closure, data []byte) (ret []byte, err error) {
...
@@ -279,7 +278,7 @@ func Call(vm *Vm, closure *Closure, data []byte) (ret []byte, err error) {
// TODO FIXME ASAP
// TODO FIXME ASAP
context
.
state
.
trie
=
t2
context
.
state
.
trie
=
t2
statelogger
.
Debug
ln
(
"Warn: PARANOIA: Different state object roots during copy"
)
statelogger
.
Info
ln
(
"Warn: PARANOIA: Different state object roots during copy"
)
}
}
}
}
...
...
ethchain/vm.go
View file @
90eb4f19
...
@@ -56,6 +56,7 @@ type Vm struct {
...
@@ -56,6 +56,7 @@ type Vm struct {
Hook
DebugHook
Hook
DebugHook
BreakPoints
[]
int64
BreakPoints
[]
int64
Stepping
bool
Stepping
bool
Fn
string
}
}
type
DebugHook
func
(
step
int
,
op
OpCode
,
mem
*
Memory
,
stack
*
Stack
,
stateObject
*
StateObject
)
bool
type
DebugHook
func
(
step
int
,
op
OpCode
,
mem
*
Memory
,
stack
*
Stack
,
stateObject
*
StateObject
)
bool
...
@@ -107,7 +108,7 @@ func (vm *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
...
@@ -107,7 +108,7 @@ func (vm *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
}
}
}()
}()
vmlogger
.
Debugf
(
"(
~) %x gas: %v (d) %x
\n
"
,
closure
.
object
.
Address
(),
closure
.
Gas
,
closure
.
Args
)
vmlogger
.
Debugf
(
"(
%s) %x gas: %v (d) %x
\n
"
,
vm
.
Fn
,
closure
.
object
.
Address
(),
closure
.
Gas
,
closure
.
Args
)
var
(
var
(
op
OpCode
op
OpCode
...
@@ -577,7 +578,7 @@ func (vm *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
...
@@ -577,7 +578,7 @@ func (vm *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
stack
.
Push
(
val
.
BigInt
())
stack
.
Push
(
val
.
BigInt
())
vm
.
Printf
(
" {0x%x
} 0x%x
"
,
loc
.
Bytes
(),
val
.
Bytes
())
vm
.
Printf
(
" {0x%x
: 0x%x}
"
,
loc
.
Bytes
(),
val
.
Bytes
())
case
SSTORE
:
case
SSTORE
:
require
(
2
)
require
(
2
)
val
,
loc
:=
stack
.
Popn
()
val
,
loc
:=
stack
.
Popn
()
...
@@ -586,7 +587,7 @@ func (vm *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
...
@@ -586,7 +587,7 @@ func (vm *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
// Add the change to manifest
// Add the change to manifest
vm
.
state
.
manifest
.
AddStorageChange
(
closure
.
Object
(),
loc
.
Bytes
(),
val
)
vm
.
state
.
manifest
.
AddStorageChange
(
closure
.
Object
(),
loc
.
Bytes
(),
val
)
vm
.
Printf
(
" {0x%x
} 0x%x
"
,
loc
,
val
)
vm
.
Printf
(
" {0x%x
: 0x%x}
"
,
loc
,
val
)
case
JUMP
:
case
JUMP
:
require
(
1
)
require
(
1
)
pc
=
stack
.
Pop
()
pc
=
stack
.
Pop
()
...
...
ethpub/pub.go
View file @
90eb4f19
...
@@ -217,7 +217,7 @@ func (lib *PEthereum) createTx(key, recipient, valueStr, gasStr, gasPriceStr, sc
...
@@ -217,7 +217,7 @@ func (lib *PEthereum) createTx(key, recipient, valueStr, gasStr, gasPriceStr, sc
if
ethutil
.
IsHex
(
scriptStr
)
{
if
ethutil
.
IsHex
(
scriptStr
)
{
script
=
ethutil
.
Hex2Bytes
(
scriptStr
[
2
:
])
script
=
ethutil
.
Hex2Bytes
(
scriptStr
[
2
:
])
}
else
{
}
else
{
script
,
err
=
ethutil
.
Compile
(
scriptStr
)
script
,
err
=
ethutil
.
Compile
(
scriptStr
,
false
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
...
...
ethutil/script.go
View file @
90eb4f19
...
@@ -9,7 +9,7 @@ import (
...
@@ -9,7 +9,7 @@ import (
)
)
// General compile function
// General compile function
func
Compile
(
script
string
)
(
ret
[]
byte
,
err
error
)
{
func
Compile
(
script
string
,
silent
bool
)
(
ret
[]
byte
,
err
error
)
{
if
len
(
script
)
>
2
{
if
len
(
script
)
>
2
{
line
:=
strings
.
Split
(
script
,
"
\n
"
)[
0
]
line
:=
strings
.
Split
(
script
,
"
\n
"
)[
0
]
...
@@ -26,6 +26,7 @@ func Compile(script string) (ret []byte, err error) {
...
@@ -26,6 +26,7 @@ func Compile(script string) (ret []byte, err error) {
}
else
{
}
else
{
compiler
:=
mutan
.
NewCompiler
(
backend
.
NewEthereumBackend
())
compiler
:=
mutan
.
NewCompiler
(
backend
.
NewEthereumBackend
())
compiler
.
Silent
=
silent
byteCode
,
errors
:=
compiler
.
Compile
(
strings
.
NewReader
(
script
))
byteCode
,
errors
:=
compiler
.
Compile
(
strings
.
NewReader
(
script
))
if
len
(
errors
)
>
0
{
if
len
(
errors
)
>
0
{
var
errs
string
var
errs
string
...
...
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