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
29499900
Commit
29499900
authored
Sep 09, 2014
by
obscuren
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added CALLSTATELESS
parent
d91357d0
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
22 additions
and
8 deletions
+22
-8
state_transition.go
ethchain/state_transition.go
+1
-1
vm.go
ethvm/vm.go
+21
-7
No files found.
ethchain/state_transition.go
View file @
29499900
...
...
@@ -283,7 +283,7 @@ func (self *StateTransition) Eval(msg *ethstate.Message, script []byte, context
for
e
:=
vm
.
Queue
()
.
Front
();
e
!=
nil
;
e
=
e
.
Next
()
{
msg
:=
e
.
Value
.
(
*
ethvm
.
Message
)
msg
.
Exec
(
transactor
)
msg
.
Exec
(
msg
.
Addr
(),
transactor
)
}
}
...
...
ethvm/vm.go
View file @
29499900
...
...
@@ -201,7 +201,7 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
require
(
4
)
newMemSize
=
stack
.
data
[
stack
.
Len
()
-
1
]
.
Uint64
()
+
stack
.
data
[
stack
.
Len
()
-
4
]
.
Uint64
()
case
CALL
:
case
CALL
,
CALLSTATELESS
:
require
(
7
)
gas
.
Set
(
GasCall
)
addStepGasUsage
(
stack
.
data
[
stack
.
Len
()
-
1
])
...
...
@@ -752,7 +752,7 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
closure
.
UseGas
(
closure
.
Gas
)
msg
:=
NewMessage
(
self
,
addr
,
input
,
gas
,
closure
.
Price
,
value
)
ret
,
err
:=
msg
.
Exec
(
closure
)
ret
,
err
:=
msg
.
Exec
(
addr
,
closure
)
if
err
!=
nil
{
stack
.
Push
(
ethutil
.
BigFalse
)
...
...
@@ -816,7 +816,7 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
if
self
.
Dbg
!=
nil
{
self
.
Dbg
.
SetCode
(
closure
.
Code
)
}
case
CALL
:
case
CALL
,
CALLSTATELESS
:
require
(
7
)
self
.
Endl
()
...
...
@@ -834,8 +834,15 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
snapshot
:=
self
.
env
.
State
()
.
Copy
()
msg
:=
NewMessage
(
self
,
addr
.
Bytes
(),
args
,
gas
,
closure
.
Price
,
value
)
ret
,
err
:=
msg
.
Exec
(
closure
)
var
executeAddr
[]
byte
if
op
==
CALLSTATELESS
{
executeAddr
=
closure
.
Address
()
}
else
{
executeAddr
=
addr
.
Bytes
()
}
msg
:=
NewMessage
(
self
,
executeAddr
,
args
,
gas
,
closure
.
Price
,
value
)
ret
,
err
:=
msg
.
Exec
(
addr
.
Bytes
(),
closure
)
if
err
!=
nil
{
stack
.
Push
(
ethutil
.
BigFalse
)
...
...
@@ -1017,7 +1024,11 @@ func (self *Message) Postpone() {
self
.
vm
.
queue
.
PushBack
(
self
)
}
func
(
self
*
Message
)
Exec
(
caller
ClosureRef
)
(
ret
[]
byte
,
err
error
)
{
func
(
self
*
Message
)
Addr
()
[]
byte
{
return
self
.
address
}
func
(
self
*
Message
)
Exec
(
codeAddr
[]
byte
,
caller
ClosureRef
)
(
ret
[]
byte
,
err
error
)
{
queue
:=
self
.
vm
.
queue
self
.
vm
.
queue
=
list
.
New
()
...
...
@@ -1049,8 +1060,11 @@ func (self *Message) Exec(caller ClosureRef) (ret []byte, err error) {
caller
.
Object
()
.
SubAmount
(
self
.
value
)
stateObject
.
AddAmount
(
self
.
value
)
// Retrieve the executing code
code
:=
self
.
vm
.
env
.
State
()
.
GetCode
(
codeAddr
)
// Create a new callable closure
c
:=
NewClosure
(
msg
,
caller
,
object
,
object
.
C
ode
,
self
.
gas
,
self
.
price
)
c
:=
NewClosure
(
msg
,
caller
,
object
,
c
ode
,
self
.
gas
,
self
.
price
)
// Executer the closure and get the return value (if any)
ret
,
_
,
err
=
c
.
Call
(
self
.
vm
,
self
.
input
)
...
...
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