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
b6cb5272
Commit
b6cb5272
authored
Dec 03, 2014
by
obscuren
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Descriptive function names for closure getters
parent
6d99c03d
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
28 additions
and
40 deletions
+28
-40
debugger.go
cmd/mist/debugger.go
+0
-7
closure.go
vm/closure.go
+26
-31
vm_debug.go
vm/vm_debug.go
+2
-2
No files found.
cmd/mist/debugger.go
View file @
b6cb5272
...
...
@@ -152,13 +152,6 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data
block
:=
self
.
lib
.
eth
.
ChainManager
()
.
CurrentBlock
env
:=
utils
.
NewEnv
(
statedb
,
block
,
account
.
Address
(),
value
)
/*
callerClosure := vm.NewClosure(&state.Message{}, account, contract, script, gas, gasPrice)
evm := vm.NewDebugVm(env)
evm.Dbg = self.Db
self.vm = evm
self.Db.done = false
*/
self
.
Logf
(
"callsize %d"
,
len
(
script
))
go
func
()
{
...
...
vm/closure.go
View file @
b6cb5272
package
vm
// TODO Re write VM to use values instead of big integers?
import
(
"math/big"
...
...
@@ -17,7 +15,6 @@ type ClosureRef interface {
SetStorage
(
*
big
.
Int
,
*
ethutil
.
Value
)
}
// Basic inline closure object which implement the 'closure' interface
type
Closure
struct
{
caller
ClosureRef
object
ClosureRef
...
...
@@ -44,18 +41,8 @@ func NewClosure(msg *state.Message, caller ClosureRef, object ClosureRef, code [
return
c
}
// Retuns the x element in data slice
func
(
c
*
Closure
)
GetStorage
(
x
*
big
.
Int
)
*
ethutil
.
Value
{
m
:=
c
.
object
.
GetStorage
(
x
)
if
m
==
nil
{
return
ethutil
.
EmptyValue
()
}
return
m
}
func
(
c
*
Closure
)
Get
(
x
*
big
.
Int
)
*
ethutil
.
Value
{
return
c
.
Gets
(
x
,
big
.
NewInt
(
1
))
func
(
c
*
Closure
)
GetValue
(
x
*
big
.
Int
)
*
ethutil
.
Value
{
return
c
.
GetRangeValue
(
x
,
big
.
NewInt
(
1
))
}
func
(
c
*
Closure
)
GetOp
(
x
int
)
OpCode
{
...
...
@@ -78,7 +65,7 @@ func (c *Closure) GetBytes(x, y int) []byte {
return
c
.
Code
[
x
:
x
+
y
]
}
func
(
c
*
Closure
)
Get
s
(
x
,
y
*
big
.
Int
)
*
ethutil
.
Value
{
func
(
c
*
Closure
)
Get
RangeValue
(
x
,
y
*
big
.
Int
)
*
ethutil
.
Value
{
if
x
.
Int64
()
>=
int64
(
len
(
c
.
Code
))
||
y
.
Int64
()
>=
int64
(
len
(
c
.
Code
))
{
return
ethutil
.
NewValue
(
0
)
}
...
...
@@ -88,27 +75,21 @@ func (c *Closure) Gets(x, y *big.Int) *ethutil.Value {
return
ethutil
.
NewValue
(
partial
)
}
func
(
self
*
Closure
)
SetCode
(
code
[]
byte
)
{
self
.
Code
=
code
}
/*
* State storage functions
*/
func
(
c
*
Closure
)
SetStorage
(
x
*
big
.
Int
,
val
*
ethutil
.
Value
)
{
c
.
object
.
SetStorage
(
x
,
val
)
}
func
(
c
*
Closure
)
Address
()
[]
byte
{
return
c
.
object
.
Address
()
}
/*
func (c *Closure) Call(vm VirtualMachine, args []byte) ([]byte, *big.Int, error) {
c.Args = args
ret, err := vm.RunClosure(c)
func
(
c
*
Closure
)
GetStorage
(
x
*
big
.
Int
)
*
ethutil
.
Value
{
m
:=
c
.
object
.
GetStorage
(
x
)
if
m
==
nil
{
return
ethutil
.
EmptyValue
()
}
return
ret, c.UsedGas, err
return
m
}
*/
func
(
c
*
Closure
)
Return
(
ret
[]
byte
)
[]
byte
{
// Return the remaining gas to the caller
...
...
@@ -117,6 +98,9 @@ func (c *Closure) Return(ret []byte) []byte {
return
ret
}
/*
* Gas functions
*/
func
(
c
*
Closure
)
UseGas
(
gas
*
big
.
Int
)
bool
{
if
c
.
Gas
.
Cmp
(
gas
)
<
0
{
return
false
...
...
@@ -136,6 +120,17 @@ func (c *Closure) ReturnGas(gas, price *big.Int) {
c
.
UsedGas
.
Sub
(
c
.
UsedGas
,
gas
)
}
/*
* Set / Get
*/
func
(
c
*
Closure
)
Caller
()
ClosureRef
{
return
c
.
caller
}
func
(
c
*
Closure
)
Address
()
[]
byte
{
return
c
.
object
.
Address
()
}
func
(
self
*
Closure
)
SetCode
(
code
[]
byte
)
{
self
.
Code
=
code
}
vm/vm_debug.go
View file @
b6cb5272
...
...
@@ -737,7 +737,7 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price *
case
PUSH1
,
PUSH2
,
PUSH3
,
PUSH4
,
PUSH5
,
PUSH6
,
PUSH7
,
PUSH8
,
PUSH9
,
PUSH10
,
PUSH11
,
PUSH12
,
PUSH13
,
PUSH14
,
PUSH15
,
PUSH16
,
PUSH17
,
PUSH18
,
PUSH19
,
PUSH20
,
PUSH21
,
PUSH22
,
PUSH23
,
PUSH24
,
PUSH25
,
PUSH26
,
PUSH27
,
PUSH28
,
PUSH29
,
PUSH30
,
PUSH31
,
PUSH32
:
a
:=
big
.
NewInt
(
int64
(
op
)
-
int64
(
PUSH1
)
+
1
)
pc
.
Add
(
pc
,
ethutil
.
Big1
)
data
:=
closure
.
Get
s
(
pc
,
a
)
data
:=
closure
.
Get
RangeValue
(
pc
,
a
)
val
:=
ethutil
.
BigD
(
data
.
Bytes
())
// Push value to stack
stack
.
Push
(
val
)
...
...
@@ -754,7 +754,7 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price *
self
.
Printf
(
" => [%d] 0x%x"
,
n
,
stack
.
Peek
()
.
Bytes
())
if
OpCode
(
closure
.
Get
(
new
(
big
.
Int
)
.
Add
(
pc
,
ethutil
.
Big1
))
.
Uint
())
==
POP
&&
OpCode
(
closure
.
Get
(
new
(
big
.
Int
)
.
Add
(
pc
,
big
.
NewInt
(
2
)))
.
Uint
())
==
POP
{
if
OpCode
(
closure
.
Get
Value
(
new
(
big
.
Int
)
.
Add
(
pc
,
ethutil
.
Big1
))
.
Uint
())
==
POP
&&
OpCode
(
closure
.
GetValue
(
new
(
big
.
Int
)
.
Add
(
pc
,
big
.
NewInt
(
2
)))
.
Uint
())
==
POP
{
fmt
.
Println
(
toValue
(
v
))
}
case
SWAP1
,
SWAP2
,
SWAP3
,
SWAP4
,
SWAP5
,
SWAP6
,
SWAP7
,
SWAP8
,
SWAP9
,
SWAP10
,
SWAP11
,
SWAP12
,
SWAP13
,
SWAP14
,
SWAP15
,
SWAP16
:
...
...
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