mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-19 02:12:23 +00:00
live/filter: register api inner
Signed-off-by: jsvisa <delweng@gmail.com>
This commit is contained in:
parent
b62bf22cb9
commit
f08d9a058b
2 changed files with 15 additions and 14 deletions
|
|
@ -60,7 +60,7 @@ func (tr *traceResult) DecodeRLP(s *rlp.Stream) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
type filter struct {
|
type filter struct {
|
||||||
backend tracers.Backend
|
backend tracing.Backend
|
||||||
kvdb ethdb.Database
|
kvdb ethdb.Database
|
||||||
frdb *rawdb.Freezer
|
frdb *rawdb.Freezer
|
||||||
blockCh chan uint64
|
blockCh chan uint64
|
||||||
|
|
@ -113,20 +113,20 @@ func toKVKey(name string, number uint64, hash common.Hash) []byte {
|
||||||
return key
|
return key
|
||||||
}
|
}
|
||||||
|
|
||||||
func newFilter(cfg json.RawMessage, backend tracers.Backend) (*tracing.Hooks, []rpc.API, error) {
|
func newFilter(cfg json.RawMessage, stack tracers.LiveApiRegister, backend tracing.Backend) (*tracing.Hooks, error) {
|
||||||
var config filterTracerConfig
|
var config filterTracerConfig
|
||||||
if cfg != nil {
|
if cfg != nil {
|
||||||
if err := json.Unmarshal(cfg, &config); err != nil {
|
if err := json.Unmarshal(cfg, &config); err != nil {
|
||||||
return nil, nil, fmt.Errorf("failed to parse config: %v", err)
|
return nil, fmt.Errorf("failed to parse config: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if config.Path == "" {
|
if config.Path == "" {
|
||||||
return nil, nil, errors.New("filter tracer output path is required")
|
return nil, errors.New("filter tracer output path is required")
|
||||||
}
|
}
|
||||||
|
|
||||||
t, err := native.NewMuxTracer(config.Config)
|
t, err := native.NewMuxTracer(config.Config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
@ -136,7 +136,7 @@ func newFilter(cfg json.RawMessage, backend tracers.Backend) (*tracing.Hooks, []
|
||||||
|
|
||||||
kvdb, err := rawdb.NewPebbleDBDatabase(kvpath, 128, 1024, "trace", false, false)
|
kvdb, err := rawdb.NewPebbleDBDatabase(kvpath, 128, 1024, "trace", false, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
muxTracers := t.Tracers()
|
muxTracers := t.Tracers()
|
||||||
|
|
@ -149,16 +149,16 @@ func newFilter(cfg json.RawMessage, backend tracers.Backend) (*tracing.Hooks, []
|
||||||
|
|
||||||
frdb, err := rawdb.NewFreezer(frpath, "trace", false, tableSize, tables)
|
frdb, err := rawdb.NewFreezer(frpath, "trace", false, tableSize, tables)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, fmt.Errorf("failed to create trace freezer db: %v", err)
|
return nil, fmt.Errorf("failed to create trace freezer db: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
tail, err := frdb.Tail()
|
tail, err := frdb.Tail()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, fmt.Errorf("failed to read the tail block number from the freezer db: %v", err)
|
return nil, fmt.Errorf("failed to read the tail block number from the freezer db: %v", err)
|
||||||
}
|
}
|
||||||
frozen, err := frdb.Ancients()
|
frozen, err := frdb.Ancients()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, fmt.Errorf("failed to read the frozen block numbers from the freezer db: %v", err)
|
return nil, fmt.Errorf("failed to read the frozen block numbers from the freezer db: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
f := &filter{
|
f := &filter{
|
||||||
|
|
@ -176,11 +176,11 @@ func newFilter(cfg json.RawMessage, backend tracers.Backend) (*tracing.Hooks, []
|
||||||
if _, err := os.Stat(f.offsetFile); err == nil || os.IsExist(err) {
|
if _, err := os.Stat(f.offsetFile); err == nil || os.IsExist(err) {
|
||||||
data, err := os.ReadFile(f.offsetFile)
|
data, err := os.ReadFile(f.offsetFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, fmt.Errorf("failed to read the offset from the freezer db: %v", err)
|
return nil, fmt.Errorf("failed to read the offset from the freezer db: %v", err)
|
||||||
}
|
}
|
||||||
offset, err = strconv.Atoi(string(data))
|
offset, err = strconv.Atoi(string(data))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, fmt.Errorf("failed to convert offset: %v", err)
|
return nil, fmt.Errorf("failed to convert offset: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
log.Info("Open filter tracer", "path", config.Path, "offset", offset, "tables", tables)
|
log.Info("Open filter tracer", "path", config.Path, "offset", offset, "tables", tables)
|
||||||
|
|
@ -211,10 +211,11 @@ func newFilter(cfg json.RawMessage, backend tracers.Backend) (*tracing.Hooks, []
|
||||||
Service: &filterAPI{backend: backend, filter: f},
|
Service: &filterAPI{backend: backend, filter: f},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
stack.RegisterAPIs(apis)
|
||||||
|
|
||||||
go f.freeze()
|
go f.freeze()
|
||||||
|
|
||||||
return hooks, apis, nil
|
return hooks, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *filter) OnBlockStart(ev tracing.BlockEvent) {
|
func (f *filter) OnBlockStart(ev tracing.BlockEvent) {
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import (
|
||||||
"errors"
|
"errors"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/eth/tracers"
|
"github.com/ethereum/go-ethereum/core/tracing"
|
||||||
"github.com/ethereum/go-ethereum/internal/ethapi"
|
"github.com/ethereum/go-ethereum/internal/ethapi"
|
||||||
"github.com/ethereum/go-ethereum/rpc"
|
"github.com/ethereum/go-ethereum/rpc"
|
||||||
)
|
)
|
||||||
|
|
@ -13,7 +13,7 @@ import (
|
||||||
var errTxNotFound = errors.New("transaction not found")
|
var errTxNotFound = errors.New("transaction not found")
|
||||||
|
|
||||||
type filterAPI struct {
|
type filterAPI struct {
|
||||||
backend tracers.Backend
|
backend tracing.Backend
|
||||||
filter *filter
|
filter *filter
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue