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
c64852db
Commit
c64852db
authored
Feb 05, 2015
by
obscuren
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
pending / chain event
parent
bcacaaa4
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
71 additions
and
5 deletions
+71
-5
home.html
cmd/mist/assets/html/home.html
+9
-1
block_processor.go
core/block_processor.go
+8
-0
filter.go
core/filter.go
+3
-2
old_filter.go
event/filter/old_filter.go
+10
-1
message.go
rpc/message.go
+15
-1
packages.go
rpc/packages.go
+26
-0
No files found.
cmd/mist/assets/html/home.html
View file @
c64852db
...
...
@@ -60,7 +60,7 @@
var
web3
=
require
(
'web3'
);
var
eth
=
web3
.
eth
;
web3
.
setProvider
(
new
web3
.
providers
.
HttpSyncProvider
(
'http://localhost:8
080
'
));
web3
.
setProvider
(
new
web3
.
providers
.
HttpSyncProvider
(
'http://localhost:8
545
'
));
document
.
querySelector
(
"#number"
).
innerHTML
=
eth
.
number
;
document
.
querySelector
(
"#coinbase"
).
innerHTML
=
eth
.
coinbase
...
...
@@ -69,6 +69,14 @@
document
.
querySelector
(
"#gas_price"
).
innerHTML
=
eth
.
gasPrice
;
document
.
querySelector
(
"#mining"
).
innerHTML
=
eth
.
mining
;
document
.
querySelector
(
"#listening"
).
innerHTML
=
eth
.
listening
;
eth
.
watch
(
'pending'
).
changed
(
function
()
{
console
.
log
(
"pending changed"
);
});
eth
.
watch
(
'chain'
).
changed
(
function
()
{
console
.
log
(
"chain changed"
);
});
</script>
</html>
...
...
core/block_processor.go
View file @
c64852db
...
...
@@ -19,6 +19,10 @@ import (
"gopkg.in/fatih/set.v0"
)
type
PendingBlockEvent
struct
{
Block
*
types
.
Block
}
var
statelogger
=
logger
.
NewLogger
(
"BLOCK"
)
type
EthManager
interface
{
...
...
@@ -154,6 +158,10 @@ done:
block
.
Reward
=
cumulativeSum
block
.
Header
()
.
GasUsed
=
totalUsedGas
if
transientProcess
{
go
self
.
eventMux
.
Post
(
PendingBlockEvent
{
block
})
}
return
receipts
,
handled
,
unhandled
,
erroneous
,
err
}
...
...
core/filter.go
View file @
c64852db
...
...
@@ -34,6 +34,7 @@ type Filter struct {
topics
[][]
byte
BlockCallback
func
(
*
types
.
Block
)
PendingCallback
func
(
*
types
.
Block
)
LogsCallback
func
(
state
.
Logs
)
}
...
...
event/filter/old_filter.go
View file @
c64852db
...
...
@@ -59,7 +59,7 @@ func (self *FilterManager) GetFilter(id int) *core.Filter {
func
(
self
*
FilterManager
)
filterLoop
()
{
// Subscribe to events
events
:=
self
.
eventMux
.
Subscribe
(
core
.
NewBlockEvent
{},
state
.
Logs
(
nil
))
events
:=
self
.
eventMux
.
Subscribe
(
core
.
PendingBlockEvent
{},
core
.
NewBlockEvent
{},
state
.
Logs
(
nil
))
out
:
for
{
...
...
@@ -77,6 +77,15 @@ out:
}
self
.
filterMu
.
RUnlock
()
case
core
.
PendingBlockEvent
:
self
.
filterMu
.
RLock
()
for
_
,
filter
:=
range
self
.
filters
{
if
filter
.
PendingCallback
!=
nil
{
filter
.
PendingCallback
(
event
.
Block
)
}
}
self
.
filterMu
.
RUnlock
()
case
state
.
Logs
:
self
.
filterMu
.
RLock
()
for
_
,
filter
:=
range
self
.
filters
{
...
...
rpc/message.go
View file @
c64852db
...
...
@@ -205,7 +205,6 @@ func (req *RpcRequest) ToFilterArgs() (*FilterOptions, error) {
if
len
(
req
.
Params
)
<
1
{
return
nil
,
NewErrorResponse
(
ErrorArguments
)
}
fmt
.
Println
(
"FILTER PARAMS"
,
string
(
req
.
Params
[
0
]))
args
:=
new
(
FilterOptions
)
r
:=
bytes
.
NewReader
(
req
.
Params
[
0
])
...
...
@@ -217,6 +216,21 @@ func (req *RpcRequest) ToFilterArgs() (*FilterOptions, error) {
return
args
,
nil
}
func
(
req
*
RpcRequest
)
ToFilterStringArgs
()
(
string
,
error
)
{
if
len
(
req
.
Params
)
<
1
{
return
""
,
NewErrorResponse
(
ErrorArguments
)
}
var
args
string
err
:=
json
.
Unmarshal
(
req
.
Params
[
0
],
&
args
)
if
err
!=
nil
{
return
""
,
NewErrorResponse
(
ErrorDecodeArgs
)
}
rpclogger
.
DebugDetailf
(
"%T %v"
,
args
,
args
)
return
args
,
nil
}
func
(
req
*
RpcRequest
)
ToFilterChangedArgs
()
(
int
,
error
)
{
if
len
(
req
.
Params
)
<
1
{
return
0
,
NewErrorResponse
(
ErrorArguments
)
...
...
rpc/packages.go
View file @
c64852db
...
...
@@ -32,6 +32,7 @@ import (
"sync"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/ethdb"
"github.com/ethereum/go-ethereum/ethutil"
...
...
@@ -88,6 +89,25 @@ func (self *EthereumApi) NewFilter(args *FilterOptions, reply *interface{}) erro
return
nil
}
func
(
self
*
EthereumApi
)
NewFilterString
(
args
string
,
reply
*
interface
{})
error
{
var
id
int
filter
:=
core
.
NewFilter
(
self
.
xeth
.
Backend
())
callback
:=
func
(
block
*
types
.
Block
)
{
self
.
logs
[
id
]
=
append
(
self
.
logs
[
id
],
&
state
.
StateLog
{})
}
if
args
==
"pending"
{
filter
.
PendingCallback
=
callback
}
else
if
args
==
"chain"
{
filter
.
BlockCallback
=
callback
}
id
=
self
.
filterManager
.
InstallFilter
(
filter
)
*
reply
=
id
return
nil
}
func
(
self
*
EthereumApi
)
FilterChanged
(
id
int
,
reply
*
interface
{})
error
{
self
.
logMut
.
RLock
()
defer
self
.
logMut
.
RUnlock
()
...
...
@@ -389,6 +409,12 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
return
err
}
return
p
.
NewFilter
(
args
,
reply
)
case
"eth_newFilterString"
:
args
,
err
:=
req
.
ToFilterStringArgs
()
if
err
!=
nil
{
return
err
}
return
p
.
NewFilterString
(
args
,
reply
)
case
"eth_changed"
:
args
,
err
:=
req
.
ToFilterChangedArgs
()
if
err
!=
nil
{
...
...
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