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
b1c58b76
Commit
b1c58b76
authored
Dec 17, 2014
by
obscuren
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
moved err check
parent
ef4135ea
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
102 additions
and
17 deletions
+102
-17
chain_manager.go
core/chain_manager.go
+10
-1
chain_manager_test.go
core/chain_manager_test.go
+18
-0
execution.go
core/execution.go
+16
-16
rlp.go
ethutil/rlp.go
+30
-0
rlp_test.go
ethutil/rlp_test.go
+10
-0
javascript_runtime.go
javascript/javascript_runtime.go
+18
-0
No files found.
core/chain_manager.go
View file @
b1c58b76
...
@@ -148,6 +148,16 @@ func (bc *ChainManager) Reset() {
...
@@ -148,6 +148,16 @@ func (bc *ChainManager) Reset() {
bc
.
TD
=
ethutil
.
BigD
(
ethutil
.
Config
.
Db
.
LastKnownTD
())
bc
.
TD
=
ethutil
.
BigD
(
ethutil
.
Config
.
Db
.
LastKnownTD
())
}
}
func
(
self
*
ChainManager
)
Export
()
[]
byte
{
chainlogger
.
Infoln
(
"exporting"
,
self
.
CurrentBlock
.
Number
,
"blocks"
)
blocks
:=
make
(
types
.
Blocks
,
int
(
self
.
CurrentBlock
.
Number
.
Int64
())
+
1
)
for
block
:=
self
.
CurrentBlock
;
block
!=
nil
;
block
=
self
.
GetBlock
(
block
.
PrevHash
)
{
blocks
[
block
.
Number
.
Int64
()]
=
block
}
return
ethutil
.
Encode
(
blocks
)
}
func
(
bc
*
ChainManager
)
insert
(
block
*
types
.
Block
)
{
func
(
bc
*
ChainManager
)
insert
(
block
*
types
.
Block
)
{
encodedBlock
:=
block
.
RlpEncode
()
encodedBlock
:=
block
.
RlpEncode
()
ethutil
.
Config
.
Db
.
Put
([]
byte
(
"LastBlock"
),
encodedBlock
)
ethutil
.
Config
.
Db
.
Put
([]
byte
(
"LastBlock"
),
encodedBlock
)
...
@@ -181,7 +191,6 @@ func (self *ChainManager) GetChainHashesFromHash(hash []byte, max uint64) (chain
...
@@ -181,7 +191,6 @@ func (self *ChainManager) GetChainHashesFromHash(hash []byte, max uint64) (chain
// XXX Could be optimised by using a different database which only holds hashes (i.e., linked list)
// XXX Could be optimised by using a different database which only holds hashes (i.e., linked list)
for
i
:=
uint64
(
0
);
i
<
max
;
i
++
{
for
i
:=
uint64
(
0
);
i
<
max
;
i
++
{
chain
=
append
(
chain
,
block
.
Hash
())
chain
=
append
(
chain
,
block
.
Hash
())
if
block
.
Number
.
Cmp
(
ethutil
.
Big0
)
<=
0
{
if
block
.
Number
.
Cmp
(
ethutil
.
Big0
)
<=
0
{
...
...
core/chain_manager_test.go
View file @
b1c58b76
package
core
package
core
import
(
"fmt"
"path"
"testing"
"github.com/ethereum/go-ethereum/ethutil"
)
func
TestChainInsertions
(
t
*
testing
.
T
)
{
c1
,
err
:=
ethutil
.
ReadAllFile
(
path
.
Join
(
".."
,
"_data"
,
"chain1"
))
if
err
!=
nil
{
fmt
.
Println
(
err
)
t
.
FailNow
()
}
data1
,
_
:=
ethutil
.
Decode
([]
byte
(
c1
),
0
)
fmt
.
Println
(
data1
)
}
core/execution.go
View file @
b1c58b76
...
@@ -40,6 +40,12 @@ func (self *Execution) exec(code, contextAddr []byte, caller vm.ClosureRef) (ret
...
@@ -40,6 +40,12 @@ func (self *Execution) exec(code, contextAddr []byte, caller vm.ClosureRef) (ret
// Skipping transfer is used on testing for the initial call
// Skipping transfer is used on testing for the initial call
if
!
self
.
SkipTransfer
{
if
!
self
.
SkipTransfer
{
err
=
env
.
Transfer
(
from
,
to
,
self
.
value
)
err
=
env
.
Transfer
(
from
,
to
,
self
.
value
)
if
err
!=
nil
{
caller
.
ReturnGas
(
self
.
Gas
,
self
.
price
)
err
=
fmt
.
Errorf
(
"Insufficient funds to transfer value. Req %v, has %v"
,
self
.
value
,
from
.
Balance
)
return
}
}
}
snapshot
:=
env
.
State
()
.
Copy
()
snapshot
:=
env
.
State
()
.
Copy
()
...
@@ -50,11 +56,6 @@ func (self *Execution) exec(code, contextAddr []byte, caller vm.ClosureRef) (ret
...
@@ -50,11 +56,6 @@ func (self *Execution) exec(code, contextAddr []byte, caller vm.ClosureRef) (ret
chainlogger
.
Debugf
(
"post state %x
\n
"
,
env
.
State
()
.
Root
())
chainlogger
.
Debugf
(
"post state %x
\n
"
,
env
.
State
()
.
Root
())
}()
}()
if
err
!=
nil
{
caller
.
ReturnGas
(
self
.
Gas
,
self
.
price
)
err
=
fmt
.
Errorf
(
"Insufficient funds to transfer value. Req %v, has %v"
,
self
.
value
,
from
.
Balance
)
}
else
{
self
.
object
=
to
self
.
object
=
to
// Pre-compiled contracts (address.go) 1, 2 & 3.
// Pre-compiled contracts (address.go) 1, 2 & 3.
naddr
:=
ethutil
.
BigD
(
contextAddr
)
.
Uint64
()
naddr
:=
ethutil
.
BigD
(
contextAddr
)
.
Uint64
()
...
@@ -67,7 +68,6 @@ func (self *Execution) exec(code, contextAddr []byte, caller vm.ClosureRef) (ret
...
@@ -67,7 +68,6 @@ func (self *Execution) exec(code, contextAddr []byte, caller vm.ClosureRef) (ret
}
else
{
}
else
{
ret
,
err
=
self
.
vm
.
Run
(
to
,
caller
,
code
,
self
.
value
,
self
.
Gas
,
self
.
price
,
self
.
input
)
ret
,
err
=
self
.
vm
.
Run
(
to
,
caller
,
code
,
self
.
value
,
self
.
Gas
,
self
.
price
,
self
.
input
)
}
}
}
return
return
}
}
...
...
ethutil/rlp.go
View file @
b1c58b76
...
@@ -2,8 +2,10 @@ package ethutil
...
@@ -2,8 +2,10 @@ package ethutil
import
(
import
(
"bytes"
"bytes"
"encoding/binary"
"fmt"
"fmt"
"math/big"
"math/big"
"reflect"
)
)
type
RlpEncode
interface
{
type
RlpEncode
interface
{
...
@@ -97,6 +99,14 @@ var (
...
@@ -97,6 +99,14 @@ var (
zeroRlp
=
big
.
NewInt
(
0x0
)
zeroRlp
=
big
.
NewInt
(
0x0
)
)
)
func
intlen
(
i
int64
)
(
length
int
)
{
for
i
>
0
{
i
=
i
>>
8
length
++
}
return
}
func
Encode
(
object
interface
{})
[]
byte
{
func
Encode
(
object
interface
{})
[]
byte
{
var
buff
bytes
.
Buffer
var
buff
bytes
.
Buffer
...
@@ -168,6 +178,26 @@ func Encode(object interface{}) []byte {
...
@@ -168,6 +178,26 @@ func Encode(object interface{}) []byte {
}
}
WriteSliceHeader
(
len
(
b
.
Bytes
()))
WriteSliceHeader
(
len
(
b
.
Bytes
()))
buff
.
Write
(
b
.
Bytes
())
buff
.
Write
(
b
.
Bytes
())
default
:
// This is how it should have been from the start
// needs refactoring (@fjl)
v
:=
reflect
.
ValueOf
(
t
)
switch
v
.
Kind
()
{
case
reflect
.
Slice
:
var
b
bytes
.
Buffer
for
i
:=
0
;
i
<
v
.
Len
();
i
++
{
b
.
Write
(
Encode
(
v
.
Index
(
i
)
.
Interface
()))
}
blen
:=
b
.
Len
()
if
blen
<
56
{
buff
.
WriteByte
(
byte
(
blen
)
+
0xc0
)
}
else
{
buff
.
WriteByte
(
byte
(
intlen
(
int64
(
blen
)))
+
0xf7
)
binary
.
Write
(
&
buff
,
binary
.
BigEndian
,
int64
(
blen
))
}
buff
.
ReadFrom
(
&
b
)
}
}
}
}
else
{
}
else
{
// Empty list for nil
// Empty list for nil
...
...
ethutil/rlp_test.go
View file @
b1c58b76
...
@@ -7,6 +7,16 @@ import (
...
@@ -7,6 +7,16 @@ import (
"testing"
"testing"
)
)
func
TestNonInterfaceSlice
(
t
*
testing
.
T
)
{
vala
:=
[]
string
{
"value1"
,
"value2"
,
"value3"
}
valb
:=
[]
interface
{}{
"value1"
,
"value2"
,
"value3"
}
resa
:=
Encode
(
vala
)
resb
:=
Encode
(
valb
)
if
!
bytes
.
Equal
(
resa
,
resb
)
{
t
.
Errorf
(
"expected []string & []interface{} to be equal"
)
}
}
func
TestRlpValueEncoding
(
t
*
testing
.
T
)
{
func
TestRlpValueEncoding
(
t
*
testing
.
T
)
{
val
:=
EmptyValue
()
val
:=
EmptyValue
()
val
.
AppendList
()
.
Append
(
1
)
.
Append
(
2
)
.
Append
(
3
)
val
.
AppendList
()
.
Append
(
1
)
.
Append
(
2
)
.
Append
(
3
)
...
...
javascript/javascript_runtime.go
View file @
b1c58b76
...
@@ -121,6 +121,7 @@ func (self *JSRE) initStdFuncs() {
...
@@ -121,6 +121,7 @@ func (self *JSRE) initStdFuncs() {
eth
.
Set
(
"startMining"
,
self
.
startMining
)
eth
.
Set
(
"startMining"
,
self
.
startMining
)
eth
.
Set
(
"execBlock"
,
self
.
execBlock
)
eth
.
Set
(
"execBlock"
,
self
.
execBlock
)
eth
.
Set
(
"dump"
,
self
.
dump
)
eth
.
Set
(
"dump"
,
self
.
dump
)
eth
.
Set
(
"export"
,
self
.
export
)
}
}
/*
/*
...
@@ -236,3 +237,20 @@ func (self *JSRE) execBlock(call otto.FunctionCall) otto.Value {
...
@@ -236,3 +237,20 @@ func (self *JSRE) execBlock(call otto.FunctionCall) otto.Value {
return
otto
.
TrueValue
()
return
otto
.
TrueValue
()
}
}
func
(
self
*
JSRE
)
export
(
call
otto
.
FunctionCall
)
otto
.
Value
{
fn
,
err
:=
call
.
Argument
(
0
)
.
ToString
()
if
err
!=
nil
{
fmt
.
Println
(
err
)
return
otto
.
FalseValue
()
}
data
:=
self
.
ethereum
.
ChainManager
()
.
Export
()
if
err
:=
ethutil
.
WriteFile
(
fn
,
data
);
err
!=
nil
{
fmt
.
Println
(
err
)
return
otto
.
FalseValue
()
}
return
otto
.
TrueValue
()
}
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