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
d80f8bda
Commit
d80f8bda
authored
Dec 05, 2014
by
obscuren
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixed issue in VM where LOG didn't pop anything of the stack
parent
3cf0477c
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
56 additions
and
48 deletions
+56
-48
block_pool.go
block_pool.go
+18
-5
block_manager.go
core/block_manager.go
+6
-7
bloom9.go
core/types/bloom9.go
+5
-7
receipt.go
core/types/receipt.go
+13
-0
peer.go
peer.go
+12
-27
vm_debug.go
vm/vm_debug.go
+2
-2
No files found.
block_pool.go
View file @
d80f8bda
...
...
@@ -99,11 +99,7 @@ func (self *BlockPool) FetchHashes(peer *Peer) bool {
self
.
td
=
peer
.
td
if
!
self
.
HasLatestHash
()
{
peer
.
doneFetchingHashes
=
false
const
amount
=
256
peerlogger
.
Debugf
(
"Fetching hashes (%d) %x...
\n
"
,
amount
,
peer
.
lastReceivedHash
[
0
:
4
])
peer
.
QueueMessage
(
wire
.
NewMessage
(
wire
.
MsgGetBlockHashesTy
,
[]
interface
{}{
peer
.
lastReceivedHash
,
uint32
(
amount
)}))
self
.
fetchHashes
()
}
return
true
...
...
@@ -112,6 +108,16 @@ func (self *BlockPool) FetchHashes(peer *Peer) bool {
return
false
}
func
(
self
*
BlockPool
)
fetchHashes
()
{
peer
:=
self
.
peer
peer
.
doneFetchingHashes
=
false
const
amount
=
256
peerlogger
.
Debugf
(
"Fetching hashes (%d) %x...
\n
"
,
amount
,
peer
.
lastReceivedHash
[
0
:
4
])
peer
.
QueueMessage
(
wire
.
NewMessage
(
wire
.
MsgGetBlockHashesTy
,
[]
interface
{}{
peer
.
lastReceivedHash
,
uint32
(
amount
)}))
}
func
(
self
*
BlockPool
)
AddHash
(
hash
[]
byte
,
peer
*
Peer
)
{
self
.
mut
.
Lock
()
defer
self
.
mut
.
Unlock
()
...
...
@@ -259,6 +265,13 @@ out:
self
.
ChainLength
=
len
(
self
.
hashes
)
}
if
self
.
peer
!=
nil
&&
!
self
.
peer
.
doneFetchingHashes
&&
time
.
Since
(
self
.
peer
.
lastHashAt
)
>
10
*
time
.
Second
&&
time
.
Since
(
self
.
peer
.
lastHashRequestedAt
)
>
5
*
time
.
Second
{
self
.
fetchHashes
()
}
/*
if !self.fetchingHashes {
blocks := self.Blocks()
...
...
core/block_manager.go
View file @
d80f8bda
...
...
@@ -236,6 +236,12 @@ func (sm *BlockManager) ProcessWithParent(block, parent *types.Block) (td *big.I
return
}
rbloom
:=
types
.
CreateBloom
(
receipts
)
if
bytes
.
Compare
(
rbloom
,
block
.
LogsBloom
)
!=
0
{
err
=
fmt
.
Errorf
(
"unable to replicate block's bloom=%x"
,
rbloom
)
return
}
txSha
:=
types
.
DeriveSha
(
block
.
Transactions
())
if
bytes
.
Compare
(
txSha
,
block
.
TxSha
)
!=
0
{
err
=
fmt
.
Errorf
(
"validating transaction root. received=%x got=%x"
,
block
.
TxSha
,
txSha
)
...
...
@@ -252,13 +258,6 @@ func (sm *BlockManager) ProcessWithParent(block, parent *types.Block) (td *big.I
return
}
//block.receipts = receipts // although this isn't necessary it be in the future
rbloom
:=
types
.
CreateBloom
(
receipts
)
if
bytes
.
Compare
(
rbloom
,
block
.
LogsBloom
)
!=
0
{
err
=
fmt
.
Errorf
(
"unable to replicate block's bloom=%x"
,
rbloom
)
return
}
state
.
Update
(
ethutil
.
Big0
)
if
!
block
.
State
()
.
Cmp
(
state
)
{
...
...
core/types/bloom9.go
View file @
d80f8bda
...
...
@@ -20,18 +20,16 @@ func CreateBloom(receipts Receipts) []byte {
func
LogsBloom
(
logs
state
.
Logs
)
*
big
.
Int
{
bin
:=
new
(
big
.
Int
)
for
_
,
log
:=
range
logs
{
data
:=
[][]
byte
{
log
.
Address
()}
for
_
,
topic
:=
range
log
.
Topics
()
{
data
=
append
(
data
,
topic
)
data
:=
make
([][]
byte
,
len
(
log
.
Topics
())
+
1
)
data
[
0
]
=
log
.
Address
()
for
i
,
topic
:=
range
log
.
Topics
()
{
data
[
i
+
1
]
=
topic
}
for
_
,
b
:=
range
data
{
bin
.
Or
(
bin
,
ethutil
.
BigD
(
bloom9
(
crypto
.
Sha3
(
b
))
.
Bytes
()))
}
//if log.Data != nil {
// data = append(data, log.Data)
//}
}
return
bin
...
...
core/types/receipt.go
View file @
d80f8bda
...
...
@@ -64,5 +64,18 @@ func (self *Receipt) String() string {
type
Receipts
[]
*
Receipt
func
(
self
Receipts
)
RlpData
()
interface
{}
{
data
:=
make
([]
interface
{},
len
(
self
))
for
i
,
receipt
:=
range
self
{
data
[
i
]
=
receipt
.
RlpData
()
}
return
data
}
func
(
self
Receipts
)
RlpEncode
()
[]
byte
{
return
ethutil
.
Encode
(
self
.
RlpData
())
}
func
(
self
Receipts
)
Len
()
int
{
return
len
(
self
)
}
func
(
self
Receipts
)
GetRlp
(
i
int
)
[]
byte
{
return
ethutil
.
Rlp
(
self
[
i
])
}
peer.go
View file @
d80f8bda
...
...
@@ -24,7 +24,7 @@ const (
// The size of the output buffer for writing messages
outputBufferSize
=
50
// Current protocol version
ProtocolVersion
=
4
7
ProtocolVersion
=
4
8
// Current P2P version
P2PVersion
=
2
// Ethereum network version
...
...
@@ -132,6 +132,8 @@ type Peer struct {
lastPong
int64
lastBlockReceived
time
.
Time
doneFetchingHashes
bool
lastHashAt
time
.
Time
lastHashRequestedAt
time
.
Time
host
[]
byte
port
uint16
...
...
@@ -327,19 +329,16 @@ out:
}
}
switch
msg
.
Type
{
case
wire
.
MsgGetBlockHashesTy
:
p
.
lastHashRequestedAt
=
time
.
Now
()
}
p
.
writeMessage
(
msg
)
p
.
lastSend
=
time
.
Now
()
// Ping timer
case
<-
pingTimer
.
C
:
/*
timeSince := time.Since(time.Unix(p.lastPong, 0))
if !p.pingStartTime.IsZero() && p.lastPong != 0 && timeSince > (pingPongTimer+30*time.Second) {
peerlogger.Infof("Peer did not respond to latest pong fast enough, it took %s, disconnecting.\n", timeSince)
p.Stop()
return
}
*/
p
.
writeMessage
(
wire
.
NewMessage
(
wire
.
MsgPingTy
,
""
))
p
.
pingStartTime
=
time
.
Now
()
...
...
@@ -462,18 +461,6 @@ func (p *Peer) HandleInbound() {
// TMP
if
p
.
statusKnown
{
switch
msg
.
Type
{
/*
case wire.MsgGetTxsTy:
// Get the current transactions of the pool
txs := p.ethereum.TxPool().CurrentTransactions()
// Get the RlpData values from the txs
txsInterface := make([]interface{}, len(txs))
for i, tx := range txs {
txsInterface[i] = tx.RlpData()
}
// Broadcast it back to the peer
p.QueueMessage(wire.NewMessage(wire.MsgTxTy, txsInterface))
*/
case
wire
.
MsgGetBlockHashesTy
:
if
msg
.
Data
.
Len
()
<
2
{
...
...
@@ -508,6 +495,7 @@ func (p *Peer) HandleInbound() {
blockPool
:=
p
.
ethereum
.
blockPool
foundCommonHash
:=
false
p
.
lastHashAt
=
time
.
Now
()
it
:=
msg
.
Data
.
NewIterator
()
for
it
.
Next
()
{
...
...
@@ -524,9 +512,6 @@ func (p *Peer) HandleInbound() {
}
if
!
foundCommonHash
{
//if !p.FetchHashes() {
// p.doneFetchingHashes = true
//}
p
.
FetchHashes
()
}
else
{
peerlogger
.
Infof
(
"Found common hash (%x...)
\n
"
,
p
.
lastReceivedHash
[
0
:
4
])
...
...
vm/vm_debug.go
View file @
d80f8bda
...
...
@@ -744,12 +744,12 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price *
case
LOG0
,
LOG1
,
LOG2
,
LOG3
,
LOG4
:
n
:=
int
(
op
-
LOG0
)
topics
:=
make
([][]
byte
,
n
)
mSize
,
mStart
:=
stack
.
Pop
()
.
Int64
(),
stack
.
Pop
()
.
Int64
()
data
:=
mem
.
Geti
(
mStart
,
mSize
)
mSize
,
mStart
:=
stack
.
Popn
()
for
i
:=
0
;
i
<
n
;
i
++
{
topics
[
i
]
=
ethutil
.
LeftPadBytes
(
stack
.
Pop
()
.
Bytes
(),
32
)
}
data
:=
mem
.
Geti
(
mStart
.
Int64
(),
mSize
.
Int64
())
log
:=
&
Log
{
closure
.
Address
(),
topics
,
data
}
self
.
env
.
AddLog
(
log
)
...
...
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