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
88ff13c2
Commit
88ff13c2
authored
Mar 05, 2015
by
obscuren
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Spec changes.
* All errors during state transition result in an invalid tx
parent
ca1093f8
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
37 additions
and
7 deletions
+37
-7
error.go
core/error.go
+16
-0
execution.go
core/execution.go
+5
-3
state_transition.go
core/state_transition.go
+10
-3
vm.go
vm/vm.go
+6
-1
No files found.
core/error.go
View file @
88ff13c2
...
...
@@ -146,3 +146,19 @@ func IsKnownBlockErr(e error) bool {
_
,
ok
:=
e
.
(
*
KnownBlockError
)
return
ok
}
type
ValueTransferError
struct
{
message
string
}
func
ValueTransferErr
(
str
string
,
v
...
interface
{})
*
ValueTransferError
{
return
&
ValueTransferError
{
fmt
.
Sprintf
(
str
,
v
...
)}
}
func
(
self
*
ValueTransferError
)
Error
()
string
{
return
self
.
message
}
func
IsValueTransferErr
(
e
error
)
bool
{
_
,
ok
:=
e
.
(
*
ValueTransferError
)
return
ok
}
core/execution.go
View file @
88ff13c2
package
core
import
(
"fmt"
"math/big"
"time"
...
...
@@ -26,7 +25,10 @@ func (self *Execution) Addr() []byte {
func
(
self
*
Execution
)
Call
(
codeAddr
[]
byte
,
caller
vm
.
ContextRef
)
([]
byte
,
error
)
{
// Retrieve the executing code
code
:=
self
.
env
.
State
()
.
GetCode
(
codeAddr
)
var
code
[]
byte
if
self
.
env
.
State
()
.
GetStateObject
(
codeAddr
)
!=
nil
{
code
=
self
.
env
.
State
()
.
GetCode
(
codeAddr
)
}
return
self
.
exec
(
code
,
codeAddr
,
caller
)
}
...
...
@@ -55,7 +57,7 @@ func (self *Execution) exec(code, contextAddr []byte, caller vm.ContextRef) (ret
caller
.
ReturnGas
(
self
.
Gas
,
self
.
price
)
return
nil
,
fmt
.
Errorf
(
"insufficient funds to transfer value. Req %v, has %v"
,
self
.
value
,
from
.
Balance
())
return
nil
,
ValueTransferErr
(
"insufficient funds to transfer value. Req %v, has %v"
,
self
.
value
,
from
.
Balance
())
}
snapshot
:=
env
.
State
()
.
Copy
()
...
...
core/state_transition.go
View file @
88ff13c2
...
...
@@ -3,6 +3,7 @@ package core
import
(
"fmt"
"math/big"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/ethutil"
"github.com/ethereum/go-ethereum/state"
...
...
@@ -185,7 +186,7 @@ func (self *StateTransition) TransitionState() (ret []byte, err error) {
}
}
if
err
=
self
.
UseGas
(
big
.
NewInt
(
dgas
));
err
!=
nil
{
return
return
nil
,
InvalidTxError
(
err
)
}
//stateCopy := self.env.State().Copy()
...
...
@@ -231,10 +232,16 @@ func (self *StateTransition) TransitionState() (ret []byte, err error) {
*/
}
if
err
!=
nil
{
self
.
UseGas
(
self
.
gas
)
if
err
!=
nil
&&
IsValueTransferErr
(
err
)
{
return
nil
,
InvalidTxError
(
err
)
}
/*
if err != nil {
self.UseGas(self.gas)
}
*/
return
}
...
...
vm/vm.go
View file @
88ff13c2
...
...
@@ -408,7 +408,12 @@ func (self *Vm) Run(me, caller ContextRef, code []byte, value, gas, price *big.I
case
BALANCE
:
addr
:=
stack
.
Pop
()
.
Bytes
()
balance
:=
statedb
.
GetBalance
(
addr
)
var
balance
*
big
.
Int
if
statedb
.
GetStateObject
(
addr
)
!=
nil
{
balance
=
statedb
.
GetBalance
(
addr
)
}
else
{
balance
=
base
}
stack
.
Push
(
balance
)
...
...
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