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
fb90ecc8
Commit
fb90ecc8
authored
Aug 21, 2014
by
obscuren
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'release/0.6.4'
parents
0af0f0d8
5196f9a3
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
207 additions
and
29 deletions
+207
-29
README.md
README.md
+1
-1
dagger.go
ethchain/dagger.go
+20
-5
genesis.go
ethchain/genesis.go
+1
-1
miner.go
ethminer/miner.go
+10
-1
stack.go
ethvm/stack.go
+12
-0
types.go
ethvm/types.go
+120
-12
vm.go
ethvm/vm.go
+42
-8
peer.go
peer.go
+1
-1
No files found.
README.md
View file @
fb90ecc8
...
@@ -6,7 +6,7 @@ Ethereum
...
@@ -6,7 +6,7 @@ Ethereum
Ethereum Go Development package (C) Jeffrey Wilcke
Ethereum Go Development package (C) Jeffrey Wilcke
Ethereum is currently in its testing phase. The current state is "Proof
Ethereum is currently in its testing phase. The current state is "Proof
of Concept 0.6.
3
". For build instructions see the
[
Wiki
](
https://github.com/ethereum/go-ethereum/wiki/Building-Ethereum(Go
)
).
of Concept 0.6.
4
". For build instructions see the
[
Wiki
](
https://github.com/ethereum/go-ethereum/wiki/Building-Ethereum(Go
)
).
Ethereum Go is split up in several sub packages Please refer to each
Ethereum Go is split up in several sub packages Please refer to each
individual package for more information.
individual package for more information.
...
...
ethchain/dagger.go
View file @
fb90ecc8
package
ethchain
package
ethchain
import
(
import
(
"hash"
"math/big"
"math/rand"
"time"
"github.com/ethereum/eth-go/ethcrypto"
"github.com/ethereum/eth-go/ethcrypto"
"github.com/ethereum/eth-go/ethlog"
"github.com/ethereum/eth-go/ethlog"
"github.com/ethereum/eth-go/ethreact"
"github.com/ethereum/eth-go/ethreact"
"github.com/ethereum/eth-go/ethutil"
"github.com/ethereum/eth-go/ethutil"
"github.com/obscuren/sha3"
"github.com/obscuren/sha3"
"hash"
"math/big"
"math/rand"
"time"
)
)
var
powlogger
=
ethlog
.
NewLogger
(
"POW"
)
var
powlogger
=
ethlog
.
NewLogger
(
"POW"
)
...
@@ -18,23 +19,30 @@ type PoW interface {
...
@@ -18,23 +19,30 @@ type PoW interface {
Search
(
block
*
Block
,
reactChan
chan
ethreact
.
Event
)
[]
byte
Search
(
block
*
Block
,
reactChan
chan
ethreact
.
Event
)
[]
byte
Verify
(
hash
[]
byte
,
diff
*
big
.
Int
,
nonce
[]
byte
)
bool
Verify
(
hash
[]
byte
,
diff
*
big
.
Int
,
nonce
[]
byte
)
bool
GetHashrate
()
int64
GetHashrate
()
int64
Turbo
(
bool
)
}
}
type
EasyPow
struct
{
type
EasyPow
struct
{
hash
*
big
.
Int
hash
*
big
.
Int
HashRate
int64
HashRate
int64
turbo
bool
}
}
func
(
pow
*
EasyPow
)
GetHashrate
()
int64
{
func
(
pow
*
EasyPow
)
GetHashrate
()
int64
{
return
pow
.
HashRate
return
pow
.
HashRate
}
}
func
(
pow
*
EasyPow
)
Turbo
(
on
bool
)
{
pow
.
turbo
=
on
}
func
(
pow
*
EasyPow
)
Search
(
block
*
Block
,
reactChan
chan
ethreact
.
Event
)
[]
byte
{
func
(
pow
*
EasyPow
)
Search
(
block
*
Block
,
reactChan
chan
ethreact
.
Event
)
[]
byte
{
r
:=
rand
.
New
(
rand
.
NewSource
(
time
.
Now
()
.
UnixNano
()))
r
:=
rand
.
New
(
rand
.
NewSource
(
time
.
Now
()
.
UnixNano
()))
hash
:=
block
.
HashNoNonce
()
hash
:=
block
.
HashNoNonce
()
diff
:=
block
.
Difficulty
diff
:=
block
.
Difficulty
i
:=
int64
(
0
)
i
:=
int64
(
0
)
start
:=
time
.
Now
()
.
UnixNano
()
start
:=
time
.
Now
()
.
UnixNano
()
t
:=
time
.
Now
()
for
{
for
{
select
{
select
{
...
@@ -43,11 +51,14 @@ func (pow *EasyPow) Search(block *Block, reactChan chan ethreact.Event) []byte {
...
@@ -43,11 +51,14 @@ func (pow *EasyPow) Search(block *Block, reactChan chan ethreact.Event) []byte {
return
nil
return
nil
default
:
default
:
i
++
i
++
if
i
%
1234567
==
0
{
if
time
.
Since
(
t
)
>
(
1
*
time
.
Second
)
{
elapsed
:=
time
.
Now
()
.
UnixNano
()
-
start
elapsed
:=
time
.
Now
()
.
UnixNano
()
-
start
hashes
:=
((
float64
(
1e9
)
/
float64
(
elapsed
))
*
float64
(
i
))
/
1000
hashes
:=
((
float64
(
1e9
)
/
float64
(
elapsed
))
*
float64
(
i
))
/
1000
pow
.
HashRate
=
int64
(
hashes
)
pow
.
HashRate
=
int64
(
hashes
)
powlogger
.
Infoln
(
"Hashing @"
,
int64
(
pow
.
HashRate
),
"khash"
)
powlogger
.
Infoln
(
"Hashing @"
,
int64
(
pow
.
HashRate
),
"khash"
)
t
=
time
.
Now
()
}
}
sha
:=
ethcrypto
.
Sha3Bin
(
big
.
NewInt
(
r
.
Int63
())
.
Bytes
())
sha
:=
ethcrypto
.
Sha3Bin
(
big
.
NewInt
(
r
.
Int63
())
.
Bytes
())
...
@@ -55,6 +66,10 @@ func (pow *EasyPow) Search(block *Block, reactChan chan ethreact.Event) []byte {
...
@@ -55,6 +66,10 @@ func (pow *EasyPow) Search(block *Block, reactChan chan ethreact.Event) []byte {
return
sha
return
sha
}
}
}
}
if
!
pow
.
turbo
{
time
.
Sleep
(
20
*
time
.
Microsecond
)
}
}
}
return
nil
return
nil
...
...
ethchain/genesis.go
View file @
fb90ecc8
...
@@ -28,7 +28,7 @@ var GenesisHeader = []interface{}{
...
@@ -28,7 +28,7 @@ var GenesisHeader = []interface{}{
""
,
""
,
// Difficulty
// Difficulty
//ethutil.BigPow(2, 22),
//ethutil.BigPow(2, 22),
big
.
NewInt
(
4096
),
big
.
NewInt
(
131072
),
// Number
// Number
ethutil
.
Big0
,
ethutil
.
Big0
,
// Block minimum gas price
// Block minimum gas price
...
...
ethminer/miner.go
View file @
fb90ecc8
...
@@ -2,11 +2,12 @@ package ethminer
...
@@ -2,11 +2,12 @@ package ethminer
import
(
import
(
"bytes"
"bytes"
"sort"
"github.com/ethereum/eth-go/ethchain"
"github.com/ethereum/eth-go/ethchain"
"github.com/ethereum/eth-go/ethlog"
"github.com/ethereum/eth-go/ethlog"
"github.com/ethereum/eth-go/ethreact"
"github.com/ethereum/eth-go/ethreact"
"github.com/ethereum/eth-go/ethwire"
"github.com/ethereum/eth-go/ethwire"
"sort"
)
)
var
logger
=
ethlog
.
NewLogger
(
"MINER"
)
var
logger
=
ethlog
.
NewLogger
(
"MINER"
)
...
@@ -22,6 +23,8 @@ type Miner struct {
...
@@ -22,6 +23,8 @@ type Miner struct {
powChan
chan
[]
byte
powChan
chan
[]
byte
powQuitChan
chan
ethreact
.
Event
powQuitChan
chan
ethreact
.
Event
quitChan
chan
chan
error
quitChan
chan
chan
error
turbo
bool
}
}
func
(
self
*
Miner
)
GetPow
()
ethchain
.
PoW
{
func
(
self
*
Miner
)
GetPow
()
ethchain
.
PoW
{
...
@@ -38,6 +41,12 @@ func NewDefaultMiner(coinbase []byte, ethereum ethchain.EthManager) *Miner {
...
@@ -38,6 +41,12 @@ func NewDefaultMiner(coinbase []byte, ethereum ethchain.EthManager) *Miner {
return
&
miner
return
&
miner
}
}
func
(
self
*
Miner
)
ToggleTurbo
()
{
self
.
turbo
=
!
self
.
turbo
self
.
pow
.
Turbo
(
self
.
turbo
)
}
func
(
miner
*
Miner
)
Start
()
{
func
(
miner
*
Miner
)
Start
()
{
miner
.
reactChan
=
make
(
chan
ethreact
.
Event
,
1
)
// This is the channel that receives 'updates' when ever a new transaction or block comes in
miner
.
reactChan
=
make
(
chan
ethreact
.
Event
,
1
)
// This is the channel that receives 'updates' when ever a new transaction or block comes in
miner
.
powChan
=
make
(
chan
[]
byte
,
1
)
// This is the channel that receives valid sha hashes for a given block
miner
.
powChan
=
make
(
chan
[]
byte
,
1
)
// This is the channel that receives valid sha hashes for a given block
...
...
ethvm/stack.go
View file @
fb90ecc8
...
@@ -64,6 +64,18 @@ func (st *Stack) Peekn() (*big.Int, *big.Int) {
...
@@ -64,6 +64,18 @@ func (st *Stack) Peekn() (*big.Int, *big.Int) {
return
ints
[
0
],
ints
[
1
]
return
ints
[
0
],
ints
[
1
]
}
}
func
(
st
*
Stack
)
Swapn
(
n
int
)
(
*
big
.
Int
,
*
big
.
Int
)
{
st
.
data
[
n
],
st
.
data
[
0
]
=
st
.
data
[
0
],
st
.
data
[
n
]
return
st
.
data
[
n
],
st
.
data
[
0
]
}
func
(
st
*
Stack
)
Dupn
(
n
int
)
*
big
.
Int
{
st
.
Push
(
st
.
data
[
n
])
return
st
.
Peek
()
}
func
(
st
*
Stack
)
Push
(
d
*
big
.
Int
)
{
func
(
st
*
Stack
)
Push
(
d
*
big
.
Int
)
{
st
.
data
=
append
(
st
.
data
,
new
(
big
.
Int
)
.
Set
(
d
))
st
.
data
=
append
(
st
.
data
,
new
(
big
.
Int
)
.
Set
(
d
))
}
}
...
...
ethvm/types.go
View file @
fb90ecc8
...
@@ -31,6 +31,8 @@ const (
...
@@ -31,6 +31,8 @@ const (
OR
=
0x11
OR
=
0x11
XOR
=
0x12
XOR
=
0x12
BYTE
=
0x13
BYTE
=
0x13
ADDMOD
=
0x14
MULMOD
=
0x15
// 0x20 range - crypto
// 0x20 range - crypto
SHA3
=
0x20
SHA3
=
0x20
...
@@ -105,6 +107,40 @@ const (
...
@@ -105,6 +107,40 @@ const (
PUSH31
=
0x7e
PUSH31
=
0x7e
PUSH32
=
0x7f
PUSH32
=
0x7f
DUP1
=
0x80
DUP2
=
0x81
DUP3
=
0x82
DUP4
=
0x83
DUP5
=
0x84
DUP6
=
0x85
DUP7
=
0x86
DUP8
=
0x87
DUP9
=
0x88
DUP10
=
0x89
DUP11
=
0x8a
DUP12
=
0x8b
DUP13
=
0x8c
DUP14
=
0x8d
DUP15
=
0x8e
DUP16
=
0x8f
SWAP1
=
0x90
SWAP2
=
0x91
SWAP3
=
0x92
SWAP4
=
0x93
SWAP5
=
0x94
SWAP6
=
0x95
SWAP7
=
0x96
SWAP8
=
0x97
SWAP9
=
0x98
SWAP10
=
0x99
SWAP11
=
0x9a
SWAP12
=
0x9b
SWAP13
=
0x9c
SWAP14
=
0x9d
SWAP15
=
0x9e
SWAP16
=
0x9f
// 0xf0 range - closures
// 0xf0 range - closures
CREATE
=
0xf0
CREATE
=
0xf0
CALL
=
0xf1
CALL
=
0xf1
...
@@ -140,6 +176,8 @@ var opCodeToString = map[OpCode]string{
...
@@ -140,6 +176,8 @@ var opCodeToString = map[OpCode]string{
OR
:
"OR"
,
OR
:
"OR"
,
XOR
:
"XOR"
,
XOR
:
"XOR"
,
BYTE
:
"BYTE"
,
BYTE
:
"BYTE"
,
ADDMOD
:
"ADDMOD"
,
MULMOD
:
"MULMOD"
,
// 0x20 range - crypto
// 0x20 range - crypto
SHA3
:
"SHA3"
,
SHA3
:
"SHA3"
,
...
@@ -214,6 +252,40 @@ var opCodeToString = map[OpCode]string{
...
@@ -214,6 +252,40 @@ var opCodeToString = map[OpCode]string{
PUSH31
:
"PUSH31"
,
PUSH31
:
"PUSH31"
,
PUSH32
:
"PUSH32"
,
PUSH32
:
"PUSH32"
,
DUP1
:
"DUP1"
,
DUP2
:
"DUP2"
,
DUP3
:
"DUP3"
,
DUP4
:
"DUP4"
,
DUP5
:
"DUP5"
,
DUP6
:
"DUP6"
,
DUP7
:
"DUP7"
,
DUP8
:
"DUP8"
,
DUP9
:
"DUP9"
,
DUP10
:
"DUP10"
,
DUP11
:
"DUP11"
,
DUP12
:
"DUP12"
,
DUP13
:
"DUP13"
,
DUP14
:
"DUP14"
,
DUP15
:
"DUP15"
,
DUP16
:
"DUP16"
,
SWAP1
:
"SWAP1"
,
SWAP2
:
"SWAP2"
,
SWAP3
:
"SWAP3"
,
SWAP4
:
"SWAP4"
,
SWAP5
:
"SWAP5"
,
SWAP6
:
"SWAP6"
,
SWAP7
:
"SWAP7"
,
SWAP8
:
"SWAP8"
,
SWAP9
:
"SWAP9"
,
SWAP10
:
"SWAP10"
,
SWAP11
:
"SWAP11"
,
SWAP12
:
"SWAP12"
,
SWAP13
:
"SWAP13"
,
SWAP14
:
"SWAP14"
,
SWAP15
:
"SWAP15"
,
SWAP16
:
"SWAP16"
,
// 0xf0 range
// 0xf0 range
CREATE
:
"CREATE"
,
CREATE
:
"CREATE"
,
CALL
:
"CALL"
,
CALL
:
"CALL"
,
...
@@ -256,6 +328,8 @@ var OpCodes = map[string]byte{
...
@@ -256,6 +328,8 @@ var OpCodes = map[string]byte{
"OR"
:
0x11
,
"OR"
:
0x11
,
"XOR"
:
0x12
,
"XOR"
:
0x12
,
"BYTE"
:
0x13
,
"BYTE"
:
0x13
,
"ADDMOD"
:
0x14
,
"MULMOD"
:
0x15
,
// 0x20 range - crypto
// 0x20 range - crypto
"SHA3"
:
0x20
,
"SHA3"
:
0x20
,
...
@@ -326,6 +400,40 @@ var OpCodes = map[string]byte{
...
@@ -326,6 +400,40 @@ var OpCodes = map[string]byte{
"PUSH31"
:
0x7e
,
"PUSH31"
:
0x7e
,
"PUSH32"
:
0x7f
,
"PUSH32"
:
0x7f
,
"DUP1"
:
0x80
,
"DUP2"
:
0x81
,
"DUP3"
:
0x82
,
"DUP4"
:
0x83
,
"DUP5"
:
0x84
,
"DUP6"
:
0x85
,
"DUP7"
:
0x86
,
"DUP8"
:
0x87
,
"DUP9"
:
0x88
,
"DUP10"
:
0x89
,
"DUP11"
:
0x8a
,
"DUP12"
:
0x8b
,
"DUP13"
:
0x8c
,
"DUP14"
:
0x8d
,
"DUP15"
:
0x8e
,
"DUP16"
:
0x8f
,
"SWAP1"
:
0x90
,
"SWAP2"
:
0x91
,
"SWAP3"
:
0x92
,
"SWAP4"
:
0x93
,
"SWAP5"
:
0x94
,
"SWAP6"
:
0x95
,
"SWAP7"
:
0x96
,
"SWAP8"
:
0x97
,
"SWAP9"
:
0x98
,
"SWAP10"
:
0x99
,
"SWAP11"
:
0x9a
,
"SWAP12"
:
0x9b
,
"SWAP13"
:
0x9c
,
"SWAP14"
:
0x9d
,
"SWAP15"
:
0x9e
,
"SWAP16"
:
0x9f
,
// 0xf0 range - closures
// 0xf0 range - closures
"CREATE"
:
0xf0
,
"CREATE"
:
0xf0
,
"CALL"
:
0xf1
,
"CALL"
:
0xf1
,
...
...
ethvm/vm.go
View file @
fb90ecc8
...
@@ -439,6 +439,36 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
...
@@ -439,6 +439,36 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
}
else
{
}
else
{
stack
.
Push
(
ethutil
.
BigFalse
)
stack
.
Push
(
ethutil
.
BigFalse
)
}
}
case
ADDMOD
:
require
(
3
)
x
:=
stack
.
Pop
()
y
:=
stack
.
Pop
()
z
:=
stack
.
Pop
()
base
.
Add
(
x
,
y
)
base
.
Mod
(
base
,
z
)
ensure256
(
base
)
self
.
Printf
(
" = %v"
,
base
)
stack
.
Push
(
base
)
case
MULMOD
:
require
(
3
)
x
:=
stack
.
Pop
()
y
:=
stack
.
Pop
()
z
:=
stack
.
Pop
()
base
.
Mul
(
x
,
y
)
base
.
Mod
(
base
,
z
)
ensure256
(
base
)
self
.
Printf
(
" = %v"
,
base
)
stack
.
Push
(
base
)
// 0x20 range
// 0x20 range
case
SHA3
:
case
SHA3
:
...
@@ -600,16 +630,20 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
...
@@ -600,16 +630,20 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
case
POP
:
case
POP
:
require
(
1
)
require
(
1
)
stack
.
Pop
()
stack
.
Pop
()
case
DUP
:
case
DUP1
,
DUP2
,
DUP3
,
DUP4
,
DUP5
,
DUP6
,
DUP7
,
DUP8
,
DUP9
,
DUP10
,
DUP11
,
DUP12
,
DUP13
,
DUP14
,
DUP15
,
DUP16
:
require
(
1
)
n
:=
int
(
op
-
DUP1
+
1
)
stack
.
Push
(
stack
.
Peek
())
stack
.
Dupn
(
n
)
self
.
Printf
(
" => [%d] 0x%x"
,
n
,
stack
.
Peek
()
.
Bytes
())
case
SWAP1
,
SWAP2
,
SWAP3
,
SWAP4
,
SWAP5
,
SWAP6
,
SWAP7
,
SWAP8
,
SWAP9
,
SWAP10
,
SWAP11
,
SWAP12
,
SWAP13
,
SWAP14
,
SWAP15
,
SWAP16
:
n
:=
int
(
op
-
SWAP1
+
1
)
x
,
y
:=
stack
.
Swapn
(
n
)
self
.
Printf
(
" => 0x%x"
,
stack
.
Peek
()
.
Bytes
())
self
.
Printf
(
" => [%d] %x [0] %x"
,
n
,
x
.
Bytes
(),
y
.
Bytes
())
case
DUP
:
// NOP
case
SWAP
:
case
SWAP
:
require
(
2
)
// NOP
x
,
y
:=
stack
.
Popn
()
stack
.
Push
(
y
)
stack
.
Push
(
x
)
case
MLOAD
:
case
MLOAD
:
require
(
1
)
require
(
1
)
offset
:=
stack
.
Pop
()
offset
:=
stack
.
Pop
()
...
...
peer.go
View file @
fb90ecc8
...
@@ -24,7 +24,7 @@ const (
...
@@ -24,7 +24,7 @@ const (
// The size of the output buffer for writing messages
// The size of the output buffer for writing messages
outputBufferSize
=
50
outputBufferSize
=
50
// Current protocol version
// Current protocol version
ProtocolVersion
=
2
7
ProtocolVersion
=
2
8
// Interval for ping/pong message
// Interval for ping/pong message
pingPongTimer
=
2
*
time
.
Second
pingPongTimer
=
2
*
time
.
Second
)
)
...
...
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