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
f6fa4f88
Commit
f6fa4f88
authored
Jan 10, 2014
by
obscuren
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
WIP Splitting ethereum up in submodules
parent
dbd28a52
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
30 additions
and
59 deletions
+30
-59
block.go
block.go
+15
-5
peer.go
peer.go
+15
-54
No files found.
block.go
View file @
f6fa4f88
...
...
@@ -51,7 +51,15 @@ func CreateTestBlock(/* TODO use raw data */transactions []*Transaction) *Block
return
block
}
func
CreateBlock
(
root
string
,
num
int
,
prevHash
string
,
base
string
,
difficulty
int
,
nonce
int
,
extra
string
,
txes
[]
*
Transaction
)
*
Block
{
func
CreateBlock
(
root
string
,
num
int
,
prevHash
string
,
base
string
,
difficulty
int
,
nonce
int
,
extra
string
,
txes
[]
*
Transaction
)
*
Block
{
block
:=
&
Block
{
// Slice of transactions to include in this block
transactions
:
txes
,
...
...
@@ -134,8 +142,11 @@ func (block *Block) MarshalRlp() []byte {
// Cast it to a string (safe)
encTx
[
i
]
=
string
(
tx
.
MarshalRlp
())
}
// TODO
uncles
:=
[]
interface
{}{}
/* I made up the block. It should probably contain different data or types. It sole purpose now is testing */
// I made up the block. It should probably contain different data or types.
// It sole purpose now is testing
header
:=
[]
interface
{}{
block
.
number
,
block
.
prevHash
,
...
...
@@ -152,9 +163,8 @@ func (block *Block) MarshalRlp() []byte {
block
.
extra
,
}
// TODO
uncles
:=
[]
interface
{}{}
// Encode a slice interface which contains the header and the list of transactions.
// Encode a slice interface which contains the header and the list of
// transactions.
return
Encode
([]
interface
{}{
header
,
encTx
,
uncles
})
}
...
...
peer.go
View file @
f6fa4f88
...
...
@@ -2,57 +2,24 @@ package main
import
(
"net"
"errors"
"log"
"github.com/ethereum/ethwire-go"
)
type
InMsg
struct
{
msgType
string
// Specifies how the encoded data should be interpreted
data
[]
byte
// RLP encoded data
}
type
OutMsg
struct
{
msgType
string
data
[]
byte
}
func
ReadMessage
(
conn
net
.
Conn
)
(
*
InMsg
,
error
)
{
buff
:=
make
([]
byte
,
4069
)
// Wait for a message from this peer
n
,
err
:=
conn
.
Read
(
buff
)
if
err
!=
nil
{
return
nil
,
err
}
else
if
n
==
0
{
return
nil
,
errors
.
New
(
"Empty message received"
)
}
// Read the header (MAX n)
// XXX The data specification is made up. This will change once more details have been released on the specification of the format
decoder
:=
NewRlpDecoder
(
buff
[
:
n
])
t
:=
decoder
.
Get
(
0
)
.
AsString
()
// If the msgdata contains no data we throw an error and disconnect the peer
if
t
==
""
{
return
nil
,
errors
.
New
(
"Data contained no data type"
)
}
return
&
InMsg
{
msgType
:
t
,
data
:
decoder
.
Get
(
1
)
.
AsBytes
()},
nil
}
type
Peer
struct
{
// Server interface
server
*
Server
// Net connection
conn
net
.
Conn
// Output queue which is used to communicate and handle messages
outputQueue
chan
OutMsg
outputQueue
chan
ethwire
.
In
OutMsg
// Quit channel
quit
chan
bool
}
func
NewPeer
(
conn
net
.
Conn
,
server
*
Server
)
*
Peer
{
return
&
Peer
{
outputQueue
:
make
(
chan
OutMsg
,
1
),
// Buffered chan of 1 is enough
outputQueue
:
make
(
chan
ethwire
.
In
OutMsg
,
1
),
// Buffered chan of 1 is enough
quit
:
make
(
chan
bool
),
server
:
server
,
...
...
@@ -62,7 +29,7 @@ func NewPeer(conn net.Conn, server *Server) *Peer {
// Outputs any RLP encoded data to the peer
func
(
p
*
Peer
)
QueueMessage
(
msgType
string
,
data
[]
byte
)
{
p
.
outputQueue
<-
OutMsg
{
msgType
:
msgType
,
d
ata
:
data
}
p
.
outputQueue
<-
ethwire
.
InOutMsg
{
MsgType
:
msgType
,
D
ata
:
data
}
}
// Outbound message handler. Outbound messages are handled here
...
...
@@ -73,7 +40,13 @@ out:
// Main message queue. All outbound messages are processed through here
case
msg
:=
<-
p
.
outputQueue
:
// TODO Message checking and handle accordingly
p
.
WriteMessage
(
msg
)
err
:=
ethwire
.
WriteMessage
(
p
.
conn
,
msg
)
if
err
!=
nil
{
log
.
Println
(
err
)
// Stop the client if there was an error writing to it
p
.
Stop
()
}
// Break out of the for loop if a quit message is posted
case
<-
p
.
quit
:
...
...
@@ -82,18 +55,6 @@ out:
}
}
// Write a message to the peer.
func
(
p
*
Peer
)
WriteMessage
(
msg
OutMsg
)
{
// Encode the type and the (RLP encoded) data for sending over the wire
encoded
:=
Encode
([]
interface
{}{
msg
.
msgType
,
msg
.
data
})
// Write to the connection
_
,
err
:=
p
.
conn
.
Write
(
encoded
)
if
err
!=
nil
{
log
.
Println
(
err
)
p
.
Stop
()
}
}
// Inbound handler. Inbound messages are received here and passed to the appropriate methods
func
(
p
*
Peer
)
HandleInbound
()
{
defer
p
.
Stop
()
...
...
@@ -101,7 +62,7 @@ func (p *Peer) HandleInbound() {
out
:
for
{
// Wait for a message from the peer
msg
,
err
:=
ReadMessage
(
p
.
conn
)
msg
,
err
:=
ethwire
.
ReadMessage
(
p
.
conn
)
if
err
!=
nil
{
log
.
Println
(
err
)
...
...
@@ -109,8 +70,8 @@ out:
}
// TODO
data
,
_
:=
Decode
(
msg
.
d
ata
,
0
)
log
.
Printf
(
"%s, %s
\n
"
,
msg
.
m
sgType
,
data
)
data
,
_
:=
Decode
(
msg
.
D
ata
,
0
)
log
.
Printf
(
"%s, %s
\n
"
,
msg
.
M
sgType
,
data
)
}
// Notify the out handler we're quiting
...
...
@@ -125,7 +86,7 @@ func (p *Peer) Start() {
}
func
(
p
*
Peer
)
Stop
()
{
defer
p
.
conn
.
Close
()
p
.
conn
.
Close
()
p
.
quit
<-
true
}
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