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
1735ec03
Commit
1735ec03
authored
Jul 15, 2014
by
zelig
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
use ethreact.Event and ethreact.ReactorEngine
parent
0ecc5c81
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
18 additions
and
129 deletions
+18
-129
dagger.go
ethchain/dagger.go
+3
-2
state_manager.go
ethchain/state_manager.go
+2
-1
ethereum.go
ethereum.go
+7
-3
miner.go
ethminer/miner.go
+6
-6
reactor.go
ethutil/reactor.go
+0
-87
reactor_test.go
ethutil/reactor_test.go
+0
-30
No files found.
ethchain/dagger.go
View file @
1735ec03
...
@@ -3,6 +3,7 @@ package ethchain
...
@@ -3,6 +3,7 @@ package ethchain
import
(
import
(
"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/ethutil"
"github.com/ethereum/eth-go/ethutil"
"github.com/obscuren/sha3"
"github.com/obscuren/sha3"
"hash"
"hash"
...
@@ -14,7 +15,7 @@ import (
...
@@ -14,7 +15,7 @@ import (
var
powlogger
=
ethlog
.
NewLogger
(
"POW"
)
var
powlogger
=
ethlog
.
NewLogger
(
"POW"
)
type
PoW
interface
{
type
PoW
interface
{
Search
(
block
*
Block
,
reactChan
chan
eth
util
.
Reac
t
)
[]
byte
Search
(
block
*
Block
,
reactChan
chan
eth
react
.
Even
t
)
[]
byte
Verify
(
hash
[]
byte
,
diff
*
big
.
Int
,
nonce
[]
byte
)
bool
Verify
(
hash
[]
byte
,
diff
*
big
.
Int
,
nonce
[]
byte
)
bool
}
}
...
@@ -22,7 +23,7 @@ type EasyPow struct {
...
@@ -22,7 +23,7 @@ type EasyPow struct {
hash
*
big
.
Int
hash
*
big
.
Int
}
}
func
(
pow
*
EasyPow
)
Search
(
block
*
Block
,
reactChan
chan
eth
util
.
Reac
t
)
[]
byte
{
func
(
pow
*
EasyPow
)
Search
(
block
*
Block
,
reactChan
chan
eth
react
.
Even
t
)
[]
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
...
...
ethchain/state_manager.go
View file @
1735ec03
...
@@ -6,6 +6,7 @@ import (
...
@@ -6,6 +6,7 @@ import (
"fmt"
"fmt"
"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/ethtrie"
"github.com/ethereum/eth-go/ethtrie"
"github.com/ethereum/eth-go/ethutil"
"github.com/ethereum/eth-go/ethutil"
"github.com/ethereum/eth-go/ethwire"
"github.com/ethereum/eth-go/ethwire"
...
@@ -36,7 +37,7 @@ type EthManager interface {
...
@@ -36,7 +37,7 @@ type EthManager interface {
BlockChain
()
*
BlockChain
BlockChain
()
*
BlockChain
TxPool
()
*
TxPool
TxPool
()
*
TxPool
Broadcast
(
msgType
ethwire
.
MsgType
,
data
[]
interface
{})
Broadcast
(
msgType
ethwire
.
MsgType
,
data
[]
interface
{})
Reactor
()
*
eth
util
.
ReactorEngine
Reactor
()
*
eth
react
.
ReactorEngine
PeerCount
()
int
PeerCount
()
int
IsMining
()
bool
IsMining
()
bool
IsListening
()
bool
IsListening
()
bool
...
...
ethereum.go
View file @
1735ec03
...
@@ -6,6 +6,7 @@ import (
...
@@ -6,6 +6,7 @@ import (
"github.com/ethereum/eth-go/ethchain"
"github.com/ethereum/eth-go/ethchain"
"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/ethrpc"
"github.com/ethereum/eth-go/ethrpc"
"github.com/ethereum/eth-go/ethutil"
"github.com/ethereum/eth-go/ethutil"
"github.com/ethereum/eth-go/ethwire"
"github.com/ethereum/eth-go/ethwire"
...
@@ -73,7 +74,7 @@ type Ethereum struct {
...
@@ -73,7 +74,7 @@ type Ethereum struct {
listening
bool
listening
bool
reactor
*
eth
util
.
ReactorEngine
reactor
*
eth
react
.
ReactorEngine
RpcServer
*
ethrpc
.
JsonRpcServer
RpcServer
*
ethrpc
.
JsonRpcServer
...
@@ -108,7 +109,7 @@ func New(db ethutil.Database, clientIdentity ethwire.ClientIdentity, keyManager
...
@@ -108,7 +109,7 @@ func New(db ethutil.Database, clientIdentity ethwire.ClientIdentity, keyManager
keyManager
:
keyManager
,
keyManager
:
keyManager
,
clientIdentity
:
clientIdentity
,
clientIdentity
:
clientIdentity
,
}
}
ethereum
.
reactor
=
eth
util
.
NewReactorEngine
()
ethereum
.
reactor
=
eth
react
.
New
()
ethereum
.
txPool
=
ethchain
.
NewTxPool
(
ethereum
)
ethereum
.
txPool
=
ethchain
.
NewTxPool
(
ethereum
)
ethereum
.
blockChain
=
ethchain
.
NewBlockChain
(
ethereum
)
ethereum
.
blockChain
=
ethchain
.
NewBlockChain
(
ethereum
)
...
@@ -120,7 +121,7 @@ func New(db ethutil.Database, clientIdentity ethwire.ClientIdentity, keyManager
...
@@ -120,7 +121,7 @@ func New(db ethutil.Database, clientIdentity ethwire.ClientIdentity, keyManager
return
ethereum
,
nil
return
ethereum
,
nil
}
}
func
(
s
*
Ethereum
)
Reactor
()
*
eth
util
.
ReactorEngine
{
func
(
s
*
Ethereum
)
Reactor
()
*
eth
react
.
ReactorEngine
{
return
s
.
reactor
return
s
.
reactor
}
}
...
@@ -352,6 +353,7 @@ func (s *Ethereum) ReapDeadPeerHandler() {
...
@@ -352,6 +353,7 @@ func (s *Ethereum) ReapDeadPeerHandler() {
// Start the ethereum
// Start the ethereum
func
(
s
*
Ethereum
)
Start
(
seed
bool
)
{
func
(
s
*
Ethereum
)
Start
(
seed
bool
)
{
s
.
reactor
.
Start
()
// Bind to addr and port
// Bind to addr and port
ln
,
err
:=
net
.
Listen
(
"tcp"
,
":"
+
s
.
Port
)
ln
,
err
:=
net
.
Listen
(
"tcp"
,
":"
+
s
.
Port
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -462,6 +464,8 @@ func (s *Ethereum) Stop() {
...
@@ -462,6 +464,8 @@ func (s *Ethereum) Stop() {
}
}
s
.
txPool
.
Stop
()
s
.
txPool
.
Stop
()
s
.
stateManager
.
Stop
()
s
.
stateManager
.
Stop
()
s
.
reactor
.
Flush
()
s
.
reactor
.
Stop
()
ethlogger
.
Infoln
(
"Server stopped"
)
ethlogger
.
Infoln
(
"Server stopped"
)
close
(
s
.
shutdownChan
)
close
(
s
.
shutdownChan
)
...
...
ethminer/miner.go
View file @
1735ec03
...
@@ -4,7 +4,7 @@ import (
...
@@ -4,7 +4,7 @@ import (
"bytes"
"bytes"
"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/eth
util
"
"github.com/ethereum/eth-go/eth
react
"
"github.com/ethereum/eth-go/ethwire"
"github.com/ethereum/eth-go/ethwire"
"sort"
"sort"
)
)
...
@@ -15,19 +15,19 @@ type Miner struct {
...
@@ -15,19 +15,19 @@ type Miner struct {
pow
ethchain
.
PoW
pow
ethchain
.
PoW
ethereum
ethchain
.
EthManager
ethereum
ethchain
.
EthManager
coinbase
[]
byte
coinbase
[]
byte
reactChan
chan
eth
util
.
Reac
t
reactChan
chan
eth
react
.
Even
t
txs
ethchain
.
Transactions
txs
ethchain
.
Transactions
uncles
[]
*
ethchain
.
Block
uncles
[]
*
ethchain
.
Block
block
*
ethchain
.
Block
block
*
ethchain
.
Block
powChan
chan
[]
byte
powChan
chan
[]
byte
powQuitChan
chan
eth
util
.
Reac
t
powQuitChan
chan
eth
react
.
Even
t
quitChan
chan
bool
quitChan
chan
bool
}
}
func
NewDefaultMiner
(
coinbase
[]
byte
,
ethereum
ethchain
.
EthManager
)
Miner
{
func
NewDefaultMiner
(
coinbase
[]
byte
,
ethereum
ethchain
.
EthManager
)
Miner
{
reactChan
:=
make
(
chan
eth
util
.
Reac
t
,
1
)
// This is the channel that receives 'updates' when ever a new transaction or block comes in
reactChan
:=
make
(
chan
eth
react
.
Even
t
,
1
)
// This is the channel that receives 'updates' when ever a new transaction or block comes in
powChan
:=
make
(
chan
[]
byte
,
1
)
// This is the channel that receives valid sha hases for a given block
powChan
:=
make
(
chan
[]
byte
,
1
)
// This is the channel that receives valid sha hases for a given block
powQuitChan
:=
make
(
chan
eth
util
.
Reac
t
,
1
)
// This is the channel that can exit the miner thread
powQuitChan
:=
make
(
chan
eth
react
.
Even
t
,
1
)
// This is the channel that can exit the miner thread
quitChan
:=
make
(
chan
bool
,
1
)
quitChan
:=
make
(
chan
bool
,
1
)
ethereum
.
Reactor
()
.
Subscribe
(
"newBlock"
,
reactChan
)
ethereum
.
Reactor
()
.
Subscribe
(
"newBlock"
,
reactChan
)
...
...
ethutil/reactor.go
deleted
100644 → 0
View file @
0ecc5c81
package
ethutil
import
(
"sync"
)
type
ReactorEvent
struct
{
mut
sync
.
Mutex
event
string
chans
[]
chan
React
}
// Post the specified reactor resource on the channels
// currently subscribed
func
(
e
*
ReactorEvent
)
Post
(
react
React
)
{
e
.
mut
.
Lock
()
defer
e
.
mut
.
Unlock
()
for
_
,
ch
:=
range
e
.
chans
{
go
func
(
ch
chan
React
)
{
ch
<-
react
}(
ch
)
}
}
// Add a subscriber to this event
func
(
e
*
ReactorEvent
)
Add
(
ch
chan
React
)
{
e
.
mut
.
Lock
()
defer
e
.
mut
.
Unlock
()
e
.
chans
=
append
(
e
.
chans
,
ch
)
}
// Remove a subscriber
func
(
e
*
ReactorEvent
)
Remove
(
ch
chan
React
)
{
e
.
mut
.
Lock
()
defer
e
.
mut
.
Unlock
()
for
i
,
c
:=
range
e
.
chans
{
if
c
==
ch
{
e
.
chans
=
append
(
e
.
chans
[
:
i
],
e
.
chans
[
i
+
1
:
]
...
)
}
}
}
// Basic reactor resource
type
React
struct
{
Resource
interface
{}
Event
string
}
// The reactor basic engine. Acts as bridge
// between the events and the subscribers/posters
type
ReactorEngine
struct
{
patterns
map
[
string
]
*
ReactorEvent
}
func
NewReactorEngine
()
*
ReactorEngine
{
return
&
ReactorEngine
{
patterns
:
make
(
map
[
string
]
*
ReactorEvent
)}
}
// Subscribe a channel to the specified event
func
(
reactor
*
ReactorEngine
)
Subscribe
(
event
string
,
ch
chan
React
)
{
ev
:=
reactor
.
patterns
[
event
]
// Create a new event if one isn't available
if
ev
==
nil
{
ev
=
&
ReactorEvent
{
event
:
event
}
reactor
.
patterns
[
event
]
=
ev
}
// Add the channel to reactor event handler
ev
.
Add
(
ch
)
}
func
(
reactor
*
ReactorEngine
)
Unsubscribe
(
event
string
,
ch
chan
React
)
{
ev
:=
reactor
.
patterns
[
event
]
if
ev
!=
nil
{
ev
.
Remove
(
ch
)
}
}
func
(
reactor
*
ReactorEngine
)
Post
(
event
string
,
resource
interface
{})
{
ev
:=
reactor
.
patterns
[
event
]
if
ev
!=
nil
{
ev
.
Post
(
React
{
Resource
:
resource
,
Event
:
event
})
}
}
ethutil/reactor_test.go
deleted
100644 → 0
View file @
0ecc5c81
package
ethutil
import
"testing"
func
TestReactorAdd
(
t
*
testing
.
T
)
{
engine
:=
NewReactorEngine
()
ch
:=
make
(
chan
React
)
engine
.
Subscribe
(
"test"
,
ch
)
if
len
(
engine
.
patterns
)
!=
1
{
t
.
Error
(
"Expected patterns to be 1, got"
,
len
(
engine
.
patterns
))
}
}
func
TestReactorEvent
(
t
*
testing
.
T
)
{
engine
:=
NewReactorEngine
()
// Buffer 1, so it doesn't block for this test
ch
:=
make
(
chan
React
,
1
)
engine
.
Subscribe
(
"test"
,
ch
)
engine
.
Post
(
"test"
,
"hello"
)
value
:=
<-
ch
if
val
,
ok
:=
value
.
Resource
.
(
string
);
ok
{
if
val
!=
"hello"
{
t
.
Error
(
"Expected Resource to be 'hello', got"
,
val
)
}
}
else
{
t
.
Error
(
"Unable to cast"
)
}
}
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