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
d52878c7
Commit
d52878c7
authored
10 years ago
by
obscuren
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Removed some VMEnv & Added VmType() to vm.Environment
parent
0d97c3ce
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
25 additions
and
184 deletions
+25
-184
debugger.go
cmd/mist/debugger.go
+8
-4
vm_env.go
cmd/utils/vm_env.go
+0
-98
vm.go
tests/helper/vm.go
+1
-0
environment.go
vm/environment.go
+2
-0
vm_env.go
xeth/vm_env.go
+0
-72
xeth.go
xeth/xeth.go
+14
-10
No files found.
cmd/mist/debugger.go
View file @
d52878c7
...
...
@@ -29,6 +29,7 @@ import (
"github.com/ethereum/go-ethereum/cmd/utils"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/ethutil"
"github.com/ethereum/go-ethereum/state"
"github.com/ethereum/go-ethereum/vm"
...
...
@@ -154,14 +155,17 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data
block
:=
self
.
lib
.
eth
.
ChainManager
()
.
CurrentBlock
()
env
:=
utils
.
NewEnv
(
self
.
lib
.
eth
.
ChainManager
(),
statedb
,
block
,
account
.
Address
(),
value
)
msg
:=
types
.
NewTransactionMessage
(
nil
,
value
,
gas
,
gasPrice
,
data
)
env
:=
core
.
NewEnv
(
statedb
,
self
.
lib
.
eth
.
ChainManager
(),
msg
,
block
)
self
.
Logf
(
"callsize %d"
,
len
(
script
))
go
func
()
{
pgas
:=
new
(
big
.
Int
)
.
Set
(
gas
)
ret
,
err
:=
env
.
Call
(
account
,
contract
.
Address
(),
data
,
gas
,
gasPrice
,
ethutil
.
Big0
)
//ret, g, err := callerClosure.Call(evm, data)
tot
:=
new
(
big
.
Int
)
.
Mul
(
env
.
Gas
,
gasPrice
)
self
.
Logf
(
"gas usage %v total price = %v (%v)"
,
env
.
Gas
,
tot
,
ethutil
.
CurrencyToString
(
tot
))
rgas
:=
new
(
big
.
Int
)
.
Sub
(
pgas
,
gas
)
tot
:=
new
(
big
.
Int
)
.
Mul
(
rgas
,
gasPrice
)
self
.
Logf
(
"gas usage %v total price = %v (%v)"
,
rgas
,
tot
,
ethutil
.
CurrencyToString
(
tot
))
if
err
!=
nil
{
self
.
Logln
(
"exited with errors:"
,
err
)
}
else
{
...
...
This diff is collapsed.
Click to expand it.
cmd/utils/vm_env.go
deleted
100644 → 0
View file @
0d97c3ce
/*
This file is part of go-ethereum
go-ethereum is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
go-ethereum is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @authors
* Jeffrey Wilcke <i@jev.io>
*/
package
utils
import
(
"math/big"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/state"
"github.com/ethereum/go-ethereum/vm"
)
type
VMEnv
struct
{
chain
*
core
.
ChainManager
state
*
state
.
StateDB
block
*
types
.
Block
transactor
[]
byte
value
*
big
.
Int
depth
int
Gas
*
big
.
Int
}
func
NewEnv
(
chain
*
core
.
ChainManager
,
state
*
state
.
StateDB
,
block
*
types
.
Block
,
transactor
[]
byte
,
value
*
big
.
Int
)
*
VMEnv
{
return
&
VMEnv
{
chain
:
chain
,
state
:
state
,
block
:
block
,
transactor
:
transactor
,
value
:
value
,
}
}
func
(
self
*
VMEnv
)
Origin
()
[]
byte
{
return
self
.
transactor
}
func
(
self
*
VMEnv
)
BlockNumber
()
*
big
.
Int
{
return
self
.
block
.
Number
()
}
func
(
self
*
VMEnv
)
PrevHash
()
[]
byte
{
return
self
.
block
.
ParentHash
()
}
func
(
self
*
VMEnv
)
Coinbase
()
[]
byte
{
return
self
.
block
.
Coinbase
()
}
func
(
self
*
VMEnv
)
Time
()
int64
{
return
self
.
block
.
Time
()
}
func
(
self
*
VMEnv
)
Difficulty
()
*
big
.
Int
{
return
self
.
block
.
Difficulty
()
}
func
(
self
*
VMEnv
)
GasLimit
()
*
big
.
Int
{
return
self
.
block
.
GasLimit
()
}
func
(
self
*
VMEnv
)
Value
()
*
big
.
Int
{
return
self
.
value
}
func
(
self
*
VMEnv
)
State
()
*
state
.
StateDB
{
return
self
.
state
}
func
(
self
*
VMEnv
)
Depth
()
int
{
return
self
.
depth
}
func
(
self
*
VMEnv
)
SetDepth
(
i
int
)
{
self
.
depth
=
i
}
func
(
self
*
VMEnv
)
GetHash
(
n
uint64
)
[]
byte
{
if
block
:=
self
.
chain
.
GetBlockByNumber
(
n
);
block
!=
nil
{
return
block
.
Hash
()
}
return
nil
}
func
(
self
*
VMEnv
)
AddLog
(
log
state
.
Log
)
{
self
.
state
.
AddLog
(
log
)
}
func
(
self
*
VMEnv
)
Transfer
(
from
,
to
vm
.
Account
,
amount
*
big
.
Int
)
error
{
return
vm
.
Transfer
(
from
,
to
,
amount
)
}
func
(
self
*
VMEnv
)
vm
(
addr
,
data
[]
byte
,
gas
,
price
,
value
*
big
.
Int
)
*
core
.
Execution
{
return
core
.
NewExecution
(
self
,
addr
,
data
,
gas
,
price
,
value
)
}
func
(
self
*
VMEnv
)
Call
(
caller
vm
.
ContextRef
,
addr
,
data
[]
byte
,
gas
,
price
,
value
*
big
.
Int
)
([]
byte
,
error
)
{
exe
:=
self
.
vm
(
addr
,
data
,
gas
,
price
,
value
)
ret
,
err
:=
exe
.
Call
(
addr
,
caller
)
self
.
Gas
=
exe
.
Gas
return
ret
,
err
}
func
(
self
*
VMEnv
)
CallCode
(
caller
vm
.
ContextRef
,
addr
,
data
[]
byte
,
gas
,
price
,
value
*
big
.
Int
)
([]
byte
,
error
)
{
exe
:=
self
.
vm
(
caller
.
Address
(),
data
,
gas
,
price
,
value
)
return
exe
.
Call
(
addr
,
caller
)
}
func
(
self
*
VMEnv
)
Create
(
caller
vm
.
ContextRef
,
addr
,
data
[]
byte
,
gas
,
price
,
value
*
big
.
Int
)
([]
byte
,
error
,
vm
.
ContextRef
)
{
exe
:=
self
.
vm
(
addr
,
data
,
gas
,
price
,
value
)
return
exe
.
Create
(
caller
)
}
This diff is collapsed.
Click to expand it.
tests/helper/vm.go
View file @
d52878c7
...
...
@@ -59,6 +59,7 @@ func (self *Env) Time() int64 { return self.time }
func
(
self
*
Env
)
Difficulty
()
*
big
.
Int
{
return
self
.
difficulty
}
func
(
self
*
Env
)
State
()
*
state
.
StateDB
{
return
self
.
state
}
func
(
self
*
Env
)
GasLimit
()
*
big
.
Int
{
return
self
.
gasLimit
}
func
(
self
*
Env
)
VmType
()
vm
.
Type
{
return
vm
.
StdVmTy
}
func
(
self
*
Env
)
GetHash
(
n
uint64
)
[]
byte
{
return
crypto
.
Sha3
([]
byte
(
big
.
NewInt
(
int64
(
n
))
.
String
()))
}
...
...
This diff is collapsed.
Click to expand it.
vm/environment.go
View file @
d52878c7
...
...
@@ -22,6 +22,8 @@ type Environment interface {
Transfer
(
from
,
to
Account
,
amount
*
big
.
Int
)
error
AddLog
(
state
.
Log
)
VmType
()
Type
Depth
()
int
SetDepth
(
i
int
)
...
...
This diff is collapsed.
Click to expand it.
xeth/vm_env.go
deleted
100644 → 0
View file @
0d97c3ce
package
xeth
import
(
"math/big"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/state"
"github.com/ethereum/go-ethereum/vm"
)
type
VMEnv
struct
{
chain
*
core
.
ChainManager
state
*
state
.
StateDB
block
*
types
.
Block
value
*
big
.
Int
sender
[]
byte
depth
int
}
func
NewEnv
(
chain
*
core
.
ChainManager
,
state
*
state
.
StateDB
,
block
*
types
.
Block
,
value
*
big
.
Int
,
sender
[]
byte
)
*
VMEnv
{
return
&
VMEnv
{
state
:
state
,
block
:
block
,
value
:
value
,
sender
:
sender
,
}
}
func
(
self
*
VMEnv
)
Origin
()
[]
byte
{
return
self
.
sender
}
func
(
self
*
VMEnv
)
BlockNumber
()
*
big
.
Int
{
return
self
.
block
.
Number
()
}
func
(
self
*
VMEnv
)
PrevHash
()
[]
byte
{
return
self
.
block
.
ParentHash
()
}
func
(
self
*
VMEnv
)
Coinbase
()
[]
byte
{
return
self
.
block
.
Coinbase
()
}
func
(
self
*
VMEnv
)
Time
()
int64
{
return
self
.
block
.
Time
()
}
func
(
self
*
VMEnv
)
Difficulty
()
*
big
.
Int
{
return
self
.
block
.
Difficulty
()
}
func
(
self
*
VMEnv
)
GasLimit
()
*
big
.
Int
{
return
self
.
block
.
GasLimit
()
}
func
(
self
*
VMEnv
)
Value
()
*
big
.
Int
{
return
self
.
value
}
func
(
self
*
VMEnv
)
State
()
*
state
.
StateDB
{
return
self
.
state
}
func
(
self
*
VMEnv
)
Depth
()
int
{
return
self
.
depth
}
func
(
self
*
VMEnv
)
SetDepth
(
i
int
)
{
self
.
depth
=
i
}
func
(
self
*
VMEnv
)
GetHash
(
n
uint64
)
[]
byte
{
if
block
:=
self
.
chain
.
GetBlockByNumber
(
n
);
block
!=
nil
{
return
block
.
Hash
()
}
return
nil
}
func
(
self
*
VMEnv
)
AddLog
(
log
state
.
Log
)
{
self
.
state
.
AddLog
(
log
)
}
func
(
self
*
VMEnv
)
Transfer
(
from
,
to
vm
.
Account
,
amount
*
big
.
Int
)
error
{
return
vm
.
Transfer
(
from
,
to
,
amount
)
}
func
(
self
*
VMEnv
)
vm
(
addr
,
data
[]
byte
,
gas
,
price
,
value
*
big
.
Int
)
*
core
.
Execution
{
return
core
.
NewExecution
(
self
,
addr
,
data
,
gas
,
price
,
value
)
}
func
(
self
*
VMEnv
)
Call
(
me
vm
.
ContextRef
,
addr
,
data
[]
byte
,
gas
,
price
,
value
*
big
.
Int
)
([]
byte
,
error
)
{
exe
:=
self
.
vm
(
addr
,
data
,
gas
,
price
,
value
)
return
exe
.
Call
(
addr
,
me
)
}
func
(
self
*
VMEnv
)
CallCode
(
me
vm
.
ContextRef
,
addr
,
data
[]
byte
,
gas
,
price
,
value
*
big
.
Int
)
([]
byte
,
error
)
{
exe
:=
self
.
vm
(
me
.
Address
(),
data
,
gas
,
price
,
value
)
return
exe
.
Call
(
addr
,
me
)
}
func
(
self
*
VMEnv
)
Create
(
me
vm
.
ContextRef
,
addr
,
data
[]
byte
,
gas
,
price
,
value
*
big
.
Int
)
([]
byte
,
error
,
vm
.
ContextRef
)
{
exe
:=
self
.
vm
(
addr
,
data
,
gas
,
price
,
value
)
return
exe
.
Create
(
me
)
}
This diff is collapsed.
Click to expand it.
xeth/xeth.go
View file @
d52878c7
...
...
@@ -224,18 +224,22 @@ func (self *XEth) Call(toStr, valueStr, gasStr, gasPriceStr, dataStr string) (st
}
var
(
statedb
=
self
.
chainManager
.
TransState
()
initiator
=
state
.
NewStateObject
(
self
.
eth
.
KeyManager
()
.
KeyPair
()
.
Address
(),
self
.
eth
.
Db
())
block
=
self
.
chainManager
.
CurrentBlock
()
to
=
statedb
.
GetOrNewStateObject
(
fromHex
(
toStr
))
data
=
fromHex
(
dataStr
)
gas
=
ethutil
.
Big
(
gasStr
)
price
=
ethutil
.
Big
(
gasPriceStr
)
value
=
ethutil
.
Big
(
valueStr
)
statedb
=
self
.
chainManager
.
TransState
()
key
=
self
.
eth
.
KeyManager
()
.
KeyPair
()
from
=
state
.
NewStateObject
(
key
.
Address
(),
self
.
eth
.
Db
())
block
=
self
.
chainManager
.
CurrentBlock
()
to
=
statedb
.
GetOrNewStateObject
(
fromHex
(
toStr
))
data
=
fromHex
(
dataStr
)
gas
=
ethutil
.
Big
(
gasStr
)
price
=
ethutil
.
Big
(
gasPriceStr
)
value
=
ethutil
.
Big
(
valueStr
)
)
vmenv
:=
NewEnv
(
self
.
chainManager
,
statedb
,
block
,
value
,
initiator
.
Address
())
res
,
err
:=
vmenv
.
Call
(
initiator
,
to
.
Address
(),
data
,
gas
,
price
,
value
)
msg
:=
types
.
NewTransactionMessage
(
fromHex
(
toStr
),
value
,
gas
,
price
,
data
)
msg
.
Sign
(
key
.
PrivateKey
)
vmenv
:=
core
.
NewEnv
(
statedb
,
self
.
chainManager
,
msg
,
block
)
res
,
err
:=
vmenv
.
Call
(
from
,
to
.
Address
(),
data
,
gas
,
price
,
value
)
if
err
!=
nil
{
return
""
,
err
}
...
...
This diff is collapsed.
Click to expand it.
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