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
125bdc32
Commit
125bdc32
authored
Dec 20, 2014
by
obscuren
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' into poc8
Conflicts: cmd/ethereum/flags.go
parents
75f0412f
6cff6dd8
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
89 additions
and
70 deletions
+89
-70
flags.go
cmd/ethereum/flags.go
+1
-1
main.go
cmd/ethereum/main.go
+1
-1
main.qml
cmd/mist/assets/qml/main.qml
+4
-4
flags.go
cmd/mist/flags.go
+1
-1
main.go
cmd/mist/main.go
+1
-1
block_manager.go
core/block_manager.go
+3
-1
execution.go
core/execution.go
+14
-19
state_transition.go
core/state_transition.go
+20
-14
transaction.go
core/types/transaction.go
+10
-9
state.go
state/state.go
+7
-0
environment.go
vm/environment.go
+5
-0
vm_debug.go
vm/vm_debug.go
+22
-19
No files found.
cmd/ethereum/flags.go
View file @
125bdc32
...
...
@@ -87,7 +87,7 @@ func Init() {
flag
.
StringVar
(
&
OutboundPort
,
"port"
,
"30303"
,
"listening port"
)
flag
.
StringVar
(
&
NatType
,
"nat"
,
""
,
"NAT support (UPNP|PMP) (none)"
)
flag
.
StringVar
(
&
PMPGateway
,
"pmp"
,
""
,
"Gateway IP for PMP"
)
flag
.
IntVar
(
&
MaxPeer
,
"maxpeer"
,
1
0
,
"maximum desired peers"
)
flag
.
IntVar
(
&
MaxPeer
,
"maxpeer"
,
3
0
,
"maximum desired peers"
)
flag
.
IntVar
(
&
RpcPort
,
"rpcport"
,
8080
,
"port to start json-rpc server on"
)
flag
.
BoolVar
(
&
StartRpc
,
"rpc"
,
false
,
"start rpc server"
)
flag
.
BoolVar
(
&
StartWebSockets
,
"ws"
,
false
,
"start websocket server"
)
...
...
cmd/ethereum/main.go
View file @
125bdc32
...
...
@@ -30,7 +30,7 @@ import (
const
(
ClientIdentifier
=
"Ethereum(G)"
Version
=
"0.7.
9
"
Version
=
"0.7.
10
"
)
var
clilogger
=
logger
.
NewLogger
(
"CLI"
)
...
...
cmd/mist/assets/qml/main.qml
View file @
125bdc32
...
...
@@ -787,8 +787,8 @@ ApplicationWindow {
title
:
"About"
minimumWidth
:
350
maximumWidth
:
350
maximumHeight
:
2
0
0
minimumHeight
:
2
0
0
maximumHeight
:
2
8
0
minimumHeight
:
2
8
0
Image
{
id
:
aboutIcon
...
...
@@ -798,7 +798,7 @@ ApplicationWindow {
smooth
:
true
source
:
"../facet.png"
x
:
10
y
:
1
0
y
:
3
0
}
Text
{
...
...
@@ -807,7 +807,7 @@ ApplicationWindow {
anchors.top
:
parent
.
top
anchors.topMargin
:
30
font.pointSize
:
12
text
:
"<h2>Mist (0.
6.5)</h2><h4>Amalthea</h4><br><h3>Development</h3>Jeffrey Wilcke<br>Viktor Trón<br><h3>Building</h3>Maran Hidskes
"
text
:
"<h2>Mist (0.
7.10)</h2><br><h3>Development</h3>Jeffrey Wilcke<br>Viktor Trón<br>Felix Lange<br>Taylor Gerring<br>Daniel Nagy<br><h3>UX</h3>Alex van de Sande<br>
"
}
}
...
...
cmd/mist/flags.go
View file @
125bdc32
...
...
@@ -106,7 +106,7 @@ func Init() {
flag
.
StringVar
(
&
KeyStore
,
"keystore"
,
"db"
,
"system to store keyrings: db|file (db)"
)
flag
.
StringVar
(
&
OutboundPort
,
"port"
,
"30303"
,
"listening port"
)
flag
.
BoolVar
(
&
UseUPnP
,
"upnp"
,
true
,
"enable UPnP support"
)
flag
.
IntVar
(
&
MaxPeer
,
"maxpeer"
,
1
0
,
"maximum desired peers"
)
flag
.
IntVar
(
&
MaxPeer
,
"maxpeer"
,
3
0
,
"maximum desired peers"
)
flag
.
IntVar
(
&
RpcPort
,
"rpcport"
,
8080
,
"port to start json-rpc server on"
)
flag
.
BoolVar
(
&
StartRpc
,
"rpc"
,
false
,
"start rpc server"
)
flag
.
BoolVar
(
&
StartWebSockets
,
"ws"
,
false
,
"start websocket server"
)
...
...
cmd/mist/main.go
View file @
125bdc32
...
...
@@ -31,7 +31,7 @@ import (
const
(
ClientIdentifier
=
"Mist"
Version
=
"0.7.
9
"
Version
=
"0.7.
10
"
)
var
ethereum
*
eth
.
Ethereum
...
...
core/block_manager.go
View file @
125bdc32
...
...
@@ -127,7 +127,6 @@ done:
statelogger
.
Infoln
(
err
)
erroneous
=
append
(
erroneous
,
tx
)
err
=
nil
continue
}
}
...
...
@@ -141,6 +140,7 @@ done:
receipt
:=
types
.
NewReceipt
(
state
.
Root
(),
cumulative
)
receipt
.
SetLogs
(
state
.
Logs
())
receipt
.
Bloom
=
types
.
CreateBloom
(
types
.
Receipts
{
receipt
})
chainlogger
.
Debugln
(
receipt
)
// Notify all subscribers
if
!
transientProcess
{
...
...
@@ -213,6 +213,8 @@ func (sm *BlockManager) ProcessWithParent(block, parent *types.Block) (td *big.I
receiptSha
:=
types
.
DeriveSha
(
receipts
)
if
bytes
.
Compare
(
receiptSha
,
block
.
ReceiptSha
)
!=
0
{
//chainlogger.Debugf("validating receipt root. received=%x got=%x", block.ReceiptSha, receiptSha)
fmt
.
Printf
(
"%x
\n
"
,
ethutil
.
Encode
(
receipts
))
err
=
fmt
.
Errorf
(
"validating receipt root. received=%x got=%x"
,
block
.
ReceiptSha
,
receiptSha
)
return
}
...
...
core/execution.go
View file @
125bdc32
...
...
@@ -3,23 +3,21 @@ package core
import
(
"fmt"
"math/big"
"time"
"github.com/ethereum/go-ethereum/state"
"github.com/ethereum/go-ethereum/vm"
)
type
Execution
struct
{
vm
vm
.
VirtualMachine
env
vm
.
Environment
address
,
input
[]
byte
Gas
,
price
,
value
*
big
.
Int
object
*
state
.
StateObject
SkipTransfer
bool
}
func
NewExecution
(
env
vm
.
Environment
,
address
,
input
[]
byte
,
gas
,
gasPrice
,
value
*
big
.
Int
)
*
Execution
{
evm
:=
vm
.
New
(
env
,
vm
.
DebugVmTy
)
return
&
Execution
{
vm
:
evm
,
address
:
address
,
input
:
input
,
Gas
:
gas
,
price
:
gasPrice
,
value
:
value
}
return
&
Execution
{
env
:
env
,
address
:
address
,
input
:
input
,
Gas
:
gas
,
price
:
gasPrice
,
value
:
value
}
}
func
(
self
*
Execution
)
Addr
()
[]
byte
{
...
...
@@ -28,16 +26,16 @@ func (self *Execution) Addr() []byte {
func
(
self
*
Execution
)
Call
(
codeAddr
[]
byte
,
caller
vm
.
ClosureRef
)
([]
byte
,
error
)
{
// Retrieve the executing code
code
:=
self
.
vm
.
Env
()
.
State
()
.
GetCode
(
codeAddr
)
code
:=
self
.
env
.
State
()
.
GetCode
(
codeAddr
)
return
self
.
exec
(
code
,
codeAddr
,
caller
)
}
func
(
self
*
Execution
)
exec
(
code
,
contextAddr
[]
byte
,
caller
vm
.
ClosureRef
)
(
ret
[]
byte
,
err
error
)
{
env
:=
self
.
vm
.
Env
()
chainlogger
.
Debugf
(
"pre state %x
\n
"
,
env
.
State
()
.
Root
()
)
env
:=
self
.
env
evm
:=
vm
.
New
(
env
,
vm
.
DebugVmTy
)
if
self
.
vm
.
Env
()
.
Depth
()
==
vm
.
MaxCallDepth
{
if
env
.
Depth
()
==
vm
.
MaxCallDepth
{
// Consume all gas (by not returning it) and return a depth error
return
nil
,
vm
.
DepthError
{}
}
...
...
@@ -55,22 +53,19 @@ func (self *Execution) exec(code, contextAddr []byte, caller vm.ClosureRef) (ret
}
snapshot
:=
env
.
State
()
.
Copy
()
defer
func
()
{
if
/*vm.IsDepthErr(err) ||*/
vm
.
IsOOGErr
(
err
)
{
env
.
State
()
.
Set
(
snapshot
)
}
chainlogger
.
Debugf
(
"post state %x
\n
"
,
env
.
State
()
.
Root
())
}()
self
.
object
=
to
ret
,
err
=
self
.
vm
.
Run
(
to
,
caller
,
code
,
self
.
value
,
self
.
Gas
,
self
.
price
,
self
.
input
)
start
:=
time
.
Now
()
ret
,
err
=
evm
.
Run
(
to
,
caller
,
code
,
self
.
value
,
self
.
Gas
,
self
.
price
,
self
.
input
)
if
err
!=
nil
{
env
.
State
()
.
Set
(
snapshot
)
}
chainlogger
.
Debugf
(
"vm took %v
\n
"
,
time
.
Since
(
start
))
return
}
func
(
self
*
Execution
)
Create
(
caller
vm
.
ClosureRef
)
(
ret
[]
byte
,
err
error
,
account
*
state
.
StateObject
)
{
ret
,
err
=
self
.
exec
(
self
.
input
,
nil
,
caller
)
account
=
self
.
vm
.
Env
()
.
State
()
.
GetStateObject
(
self
.
address
)
account
=
self
.
env
.
State
()
.
GetStateObject
(
self
.
address
)
return
}
core/state_transition.go
View file @
125bdc32
...
...
@@ -112,7 +112,7 @@ func (self *StateTransition) BuyGas() error {
sender
:=
self
.
From
()
if
sender
.
Balance
()
.
Cmp
(
MessageGasValue
(
self
.
msg
))
<
0
{
return
fmt
.
Errorf
(
"
Insufficient funds to pre-pay gas. Req %v, has %v"
,
MessageGasValue
(
self
.
msg
),
sender
.
Balance
())
return
fmt
.
Errorf
(
"
insufficient ETH for gas (%x). Req %v, has %v"
,
sender
.
Address
()[
:
4
]
,
MessageGasValue
(
self
.
msg
),
sender
.
Balance
())
}
coinbase
:=
self
.
Coinbase
()
...
...
@@ -186,15 +186,22 @@ func (self *StateTransition) TransitionState() (ret []byte, err error) {
vmenv
:=
self
.
VmEnv
()
var
ref
vm
.
ClosureRef
if
MessageCreatesContract
(
msg
)
{
self
.
rec
=
MakeContract
(
msg
,
self
.
state
)
ret
,
err
,
ref
=
vmenv
.
Create
(
sender
,
self
.
rec
.
Address
(),
self
.
msg
.
Data
(),
self
.
gas
,
self
.
gasPrice
,
self
.
value
)
ref
.
SetCode
(
ret
)
contract
:=
MakeContract
(
msg
,
self
.
state
)
ret
,
err
,
ref
=
vmenv
.
Create
(
sender
,
contract
.
Address
(),
self
.
msg
.
Data
(),
self
.
gas
,
self
.
gasPrice
,
self
.
value
)
if
err
==
nil
{
dataGas
:=
big
.
NewInt
(
int64
(
len
(
ret
)))
dataGas
.
Mul
(
dataGas
,
vm
.
GasCreateByte
)
if
err
=
self
.
UseGas
(
dataGas
);
err
==
nil
{
//self.state.SetCode(ref.Address(), ret)
ref
.
SetCode
(
ret
)
}
}
}
else
{
ret
,
err
=
vmenv
.
Call
(
self
.
From
(),
self
.
To
()
.
Address
(),
self
.
msg
.
Data
(),
self
.
gas
,
self
.
gasPrice
,
self
.
value
)
}
if
err
!=
nil
{
s
tatelogger
.
Debugln
(
err
)
s
elf
.
UseGas
(
self
.
gas
)
}
return
...
...
@@ -211,20 +218,19 @@ func MakeContract(msg Message, state *state.StateDB) *state.StateObject {
}
func
(
self
*
StateTransition
)
RefundGas
()
{
coinbaseSub
:=
new
(
big
.
Int
)
.
Set
(
self
.
gas
)
coinbase
,
sender
:=
self
.
Coinbase
(),
self
.
From
()
// Return remaining gas
remaining
:=
new
(
big
.
Int
)
.
Mul
(
self
.
gas
,
self
.
msg
.
GasPrice
())
sender
.
AddAmount
(
remaining
)
uhalf
:=
new
(
big
.
Int
)
.
Div
(
self
.
GasUsed
(),
ethutil
.
Big2
)
for
addr
,
ref
:=
range
self
.
state
.
Refunds
()
{
refund
:=
ethutil
.
BigMin
(
uhalf
,
ref
)
coinbaseSub
.
Add
(
self
.
gas
,
refund
)
self
.
gas
.
Add
(
self
.
gas
,
refund
)
self
.
state
.
AddBalance
([]
byte
(
addr
),
refund
.
Mul
(
refund
,
self
.
msg
.
GasPrice
()))
}
coinbase
,
sender
:=
self
.
Coinbase
(),
self
.
From
()
coinbase
.
RefundGas
(
coinbaseSub
,
self
.
msg
.
GasPrice
())
// Return remaining gas
remaining
:=
new
(
big
.
Int
)
.
Mul
(
self
.
gas
,
self
.
msg
.
GasPrice
())
sender
.
AddAmount
(
remaining
)
coinbase
.
RefundGas
(
self
.
gas
,
self
.
msg
.
GasPrice
())
}
func
(
self
*
StateTransition
)
GasUsed
()
*
big
.
Int
{
...
...
core/types/transaction.go
View file @
125bdc32
...
...
@@ -47,7 +47,7 @@ func NewTransactionFromValue(val *ethutil.Value) *Transaction {
}
func
(
tx
*
Transaction
)
Hash
()
[]
byte
{
data
:=
[]
interface
{}{
tx
.
Nonce
,
tx
.
gasPrice
,
tx
.
gas
,
tx
.
recipient
,
tx
.
Value
,
tx
.
D
ata
}
data
:=
[]
interface
{}{
tx
.
nonce
,
tx
.
gasPrice
,
tx
.
gas
,
tx
.
recipient
,
tx
.
value
,
tx
.
d
ata
}
return
crypto
.
Sha3
(
ethutil
.
NewValue
(
data
)
.
Encode
())
}
...
...
@@ -108,8 +108,8 @@ func (tx *Transaction) PublicKey() []byte {
sig
:=
append
(
r
,
s
...
)
sig
=
append
(
sig
,
v
-
27
)
pubkey
:=
crypto
.
Ecrecover
(
append
(
hash
,
sig
...
))
//
pubkey, _ := secp256k1.RecoverPubkey(hash, sig)
//
pubkey := crypto.Ecrecover(append(hash, sig...))
pubkey
,
_
:=
secp256k1
.
RecoverPubkey
(
hash
,
sig
)
return
pubkey
}
...
...
@@ -138,9 +138,7 @@ func (tx *Transaction) Sign(privk []byte) error {
}
func
(
tx
*
Transaction
)
RlpData
()
interface
{}
{
data
:=
[]
interface
{}{
tx
.
Nonce
,
tx
.
GasPrice
,
tx
.
Gas
,
tx
.
recipient
,
tx
.
Value
,
tx
.
Data
}
// TODO Remove prefixing zero's
data
:=
[]
interface
{}{
tx
.
nonce
,
tx
.
gasPrice
,
tx
.
gas
,
tx
.
recipient
,
tx
.
value
,
tx
.
data
}
return
append
(
data
,
tx
.
v
,
new
(
big
.
Int
)
.
SetBytes
(
tx
.
r
)
.
Bytes
(),
new
(
big
.
Int
)
.
SetBytes
(
tx
.
s
)
.
Bytes
())
}
...
...
@@ -184,6 +182,7 @@ func (tx *Transaction) String() string {
V: 0x%x
R: 0x%x
S: 0x%x
Hex: %x
`
,
tx
.
Hash
(),
len
(
tx
.
recipient
)
==
0
,
...
...
@@ -192,11 +191,13 @@ func (tx *Transaction) String() string {
tx
.
nonce
,
tx
.
gasPrice
,
tx
.
gas
,
tx
.
V
alue
,
tx
.
D
ata
,
tx
.
v
alue
,
tx
.
d
ata
,
tx
.
v
,
tx
.
r
,
tx
.
s
)
tx
.
s
,
ethutil
.
Encode
(
tx
),
)
}
// Transaction slice type for basic sorting
...
...
state/state.go
View file @
125bdc32
...
...
@@ -94,6 +94,13 @@ func (self *StateDB) GetCode(addr []byte) []byte {
return
nil
}
func
(
self
*
StateDB
)
SetCode
(
addr
,
code
[]
byte
)
{
stateObject
:=
self
.
GetStateObject
(
addr
)
if
stateObject
!=
nil
{
stateObject
.
SetCode
(
code
)
}
}
func
(
self
*
StateDB
)
GetState
(
a
,
b
[]
byte
)
[]
byte
{
stateObject
:=
self
.
GetStateObject
(
a
)
if
stateObject
!=
nil
{
...
...
vm/environment.go
View file @
125bdc32
...
...
@@ -2,6 +2,7 @@ package vm
import
(
"errors"
"fmt"
"math/big"
"github.com/ethereum/go-ethereum/ethutil"
...
...
@@ -74,3 +75,7 @@ func (self *Log) Data() []byte {
func
(
self
*
Log
)
RlpData
()
interface
{}
{
return
[]
interface
{}{
self
.
address
,
ethutil
.
ByteSliceToInterface
(
self
.
topics
),
self
.
data
}
}
func
(
self
*
Log
)
String
()
string
{
return
fmt
.
Sprintf
(
"[A=%x T=%x D=%x]"
,
self
.
address
,
self
.
topics
,
self
.
data
)
}
vm/vm_debug.go
View file @
125bdc32
...
...
@@ -108,13 +108,13 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price *
}
)
vmlogger
.
Debugf
(
"(%d) (%x) %x (code=%d) gas: %v (d) %x
\n
"
,
self
.
env
.
Depth
(),
caller
.
Address
()[
:
4
],
closure
.
Address
(),
len
(
code
),
closure
.
Gas
,
callData
)
// Don't bother with the execution if there's no code.
if
len
(
code
)
==
0
{
return
closure
.
Return
(
nil
),
nil
}
vmlogger
.
Debugf
(
"(%d) (%x) %x gas: %v (d) %x
\n
"
,
self
.
env
.
Depth
(),
caller
.
Address
()[
:
4
],
closure
.
Address
(),
closure
.
Gas
,
callData
)
for
{
prevStep
=
step
// The base for all big integer arithmetic
...
...
@@ -134,6 +134,7 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price *
addStepGasUsage
(
GasStep
)
var
newMemSize
*
big
.
Int
=
ethutil
.
Big0
var
additionalGas
*
big
.
Int
=
new
(
big
.
Int
)
// Stack Check, memory resize & gas phase
switch
op
{
// Stack checks only
...
...
@@ -213,22 +214,24 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price *
newMemSize
=
calcMemSize
(
stack
.
Peek
(),
stack
.
data
[
stack
.
Len
()
-
2
])
case
SHA3
:
require
(
2
)
gas
.
Set
(
GasSha
)
newMemSize
=
calcMemSize
(
stack
.
Peek
(),
stack
.
data
[
stack
.
Len
()
-
2
])
additionalGas
.
Set
(
stack
.
data
[
stack
.
Len
()
-
2
])
case
CALLDATACOPY
:
require
(
2
)
newMemSize
=
calcMemSize
(
stack
.
Peek
(),
stack
.
data
[
stack
.
Len
()
-
3
])
additionalGas
.
Set
(
stack
.
data
[
stack
.
Len
()
-
3
])
case
CODECOPY
:
require
(
3
)
newMemSize
=
calcMemSize
(
stack
.
Peek
(),
stack
.
data
[
stack
.
Len
()
-
3
])
additionalGas
.
Set
(
stack
.
data
[
stack
.
Len
()
-
3
])
case
EXTCODECOPY
:
require
(
4
)
newMemSize
=
calcMemSize
(
stack
.
data
[
stack
.
Len
()
-
2
],
stack
.
data
[
stack
.
Len
()
-
4
])
additionalGas
.
Set
(
stack
.
data
[
stack
.
Len
()
-
4
])
case
CALL
,
CALLCODE
:
require
(
7
)
gas
.
Set
(
GasCall
)
...
...
@@ -245,20 +248,23 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price *
newMemSize
=
calcMemSize
(
stack
.
data
[
stack
.
Len
()
-
2
],
stack
.
data
[
stack
.
Len
()
-
3
])
}
switch
op
{
case
CALLDATACOPY
,
CODECOPY
,
EXTCODECOPY
:
additionalGas
.
Add
(
additionalGas
,
u256
(
31
))
additionalGas
.
Div
(
additionalGas
,
u256
(
32
))
addStepGasUsage
(
additionalGas
)
case
SHA3
:
additionalGas
.
Add
(
additionalGas
,
u256
(
31
))
additionalGas
.
Div
(
additionalGas
,
u256
(
32
))
additionalGas
.
Mul
(
additionalGas
,
GasSha3Byte
)
addStepGasUsage
(
additionalGas
)
}
if
newMemSize
.
Cmp
(
ethutil
.
Big0
)
>
0
{
newMemSize
.
Add
(
newMemSize
,
u256
(
31
))
newMemSize
.
Div
(
newMemSize
,
u256
(
32
))
newMemSize
.
Mul
(
newMemSize
,
u256
(
32
))
switch
op
{
case
CALLDATACOPY
,
CODECOPY
,
EXTCODECOPY
:
addStepGasUsage
(
new
(
big
.
Int
)
.
Div
(
newMemSize
,
u256
(
32
)))
case
SHA3
:
g
:=
new
(
big
.
Int
)
.
Div
(
newMemSize
,
u256
(
32
))
g
.
Mul
(
g
,
GasSha3Byte
)
addStepGasUsage
(
g
)
}
if
newMemSize
.
Cmp
(
u256
(
int64
(
mem
.
Len
())))
>
0
{
memGasUsage
:=
new
(
big
.
Int
)
.
Sub
(
newMemSize
,
u256
(
int64
(
mem
.
Len
())))
memGasUsage
.
Mul
(
GasMemory
,
memGasUsage
)
...
...
@@ -643,9 +649,7 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price *
case
CODECOPY
,
EXTCODECOPY
:
var
code
[]
byte
if
op
==
EXTCODECOPY
{
addr
:=
stack
.
Pop
()
.
Bytes
()
code
=
statedb
.
GetCode
(
addr
)
code
=
statedb
.
GetCode
(
stack
.
Pop
()
.
Bytes
())
}
else
{
code
=
closure
.
Code
}
...
...
@@ -663,12 +667,11 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price *
}
else
if
cOff
+
l
>
size
{
l
=
uint64
(
math
.
Min
(
float64
(
cOff
+
l
),
float64
(
size
)))
}
codeCopy
:=
code
[
cOff
:
cOff
+
l
]
mem
.
Set
(
mOff
,
l
,
codeCopy
)
self
.
Printf
(
" => [%v, %v, %v] %x"
,
mOff
,
cOff
,
l
,
code
[
cOff
:
cOff
+
l
]
)
self
.
Printf
(
" => [%v, %v, %v] %x"
,
mOff
,
cOff
,
l
,
code
Copy
)
case
GASPRICE
:
stack
.
Push
(
closure
.
Price
)
...
...
@@ -891,7 +894,7 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price *
size
,
offset
:=
stack
.
Popn
()
ret
:=
mem
.
Get
(
offset
.
Int64
(),
size
.
Int64
())
self
.
Printf
(
" =>
(%d) 0x%x"
,
len
(
ret
),
ret
)
.
Endl
()
self
.
Printf
(
" =>
[%v, %v] (%d) 0x%x"
,
offset
,
size
,
len
(
ret
),
ret
)
.
Endl
()
return
closure
.
Return
(
ret
),
nil
case
SUICIDE
:
...
...
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